‫WPF بهتر است یا WinForms؟

 ‫معماری wpf

wpf به عنوان رقیبی جدی برای winforms از framework 3.0 به مجموعه دات‌نت اضافه شد. winforms از ابتدای تولد دات‌نت وجود داشته و تا حالا رشد خیلی زیادی کرده است. منابع بسیار زیادی درباره آن وجود دارد، برنامه نویسان زیادی به آن تسلط پیدا کرده اند و تعداد بسیار زیادی برنامه نوشته شده با آن موجود است. در آن سوی این رقابت wpf قرار دارد. wpf به زعم خیلی ها جایگزین winforms است و مایکروسافت با وجود آن دیگر winforms را توسعه نخواهد داد و صرفا به پشتیبانی آن اکتفا می‌کند. wpf به مذاق طراحان UI و عشاق گرافیک های آن چنانی بسیار خوش آمده است. ما هم به علت در پیش رو داشتن پروژه‌های جدید ویندوزی و به خاطر اینکه از قافله جهانی عقب نمانیم نظرات بعضی از مدافعان و مخالفان را بررسی کرده و به جهت فهم خودمان و استفاده دیگران خلاصه وار در اینجا می آوریم:

۱- wpf فقط روی ویندوز ویستا، ویندوز 2008، win xp sp2 و آخرین RDP ویندوز 2003 کار می‌کند.
۲- بسیار گفته شده که wpf در حوزه کنترل‌های کار با دیتا مثل DataGrid کمبودهای زیادی دارد. البته با وجود این ضعف گفته می‌شود که wpf در DataBindingهای آبجکتی مرسوم در دنیای Domain Drivern Design خیلی خوب عمل می‌کند. این مدل DataBinding از همان نوعی است که همراه با ORMهایی مثل NHibernate و LINQ رایج شده است.
۳- استدلال تعدادی از افراد برای عدم استفاده از wpf عدم علاقه آنها به دست کشیدن از دانسته‌ها و مهارت‌های قبلی‌شان در winforms و یادگیری تکنولوژی جدید wpf است. اگر شما هم مثل ما تجربه چندان با ارزشی روی winforms ندارید می‌توانید با انگیزه بیشتری به wpf فکر کنید.
۴- wpf یک عمو زاده دارد به نام SilverLight که هر دو در استفاده از XAML مشترک هستند. هر چند که SilverLight زیرمجموعه‌ای از wpf محسوب می‌شود ولی می‌توانید امیدوار باشید که با یادگیری wpf خود به خود کمی هم SilverLight یاد گرفته‌اید.
۵- wpf برای تولید و نمایش UI از خیلی از امکانات DirectX ،GPU و حافظه کارت گرافیک استفاده می‌کند و رابطه خیلی خوبی با پخش انواع فایل تصویری، ویدیویی، صوتی و انیمیشن دارد.
۶- ادعا می شود که کد منطق برنامه و کد Prsesentation در wpf کاملا از هم جداست. یعنی می توان کد XAML را به فردی که هیچ اطلاعاتی راجع به C#‎ ندارد سپرد تا آن را با Expression Blend حسابی عمل بیاورد. کد سی‌شارپ هم می‌تواند توسط یک برنامه‌نویس متعارف در Visual Studio توسعه پیدا کند.
۷- علی القاعده در برنامه های فارسی و آنهایی که از تقویم شمسی استفاده می‌کنند مشکلات زیادی وجود خواهد داشت. چون هنوز هیچ‌کس یک DatePicker فارسی با wpf ننوشته است و رفتار بقیه کنترل‌ها هم در محیط‌های پیچیده راست به چپ نویسی معلوم نیست. البته در مستندات خود wpf ذکر شده که پشتیبانی خیلی خوبی از یونیکد و مسایل localization وجود دارد.
۸- اگر خیلی از ژیگول‌بازی‌های wpf و wpfدوستان خوشتان نمی آید اصلا نامید نشوید چون winforms حالا حالاها زنده خواهد بود. همان طور که هنوز VB6 و حتی FoxPro زنده هستند.
۹- اگر برای اتمام پروژه ای عجله دارید از wpf استفاده نکنید چون ممکن است بدجوری شما را غافل‌گیر کند.
۱۰- برای یادگیری از کتاب زیر شروع کنید (بنا به توصیه دوستان wpf):
Windows Presentaion Foundation Unleashed by Adam Nathan
۱۱- بعضی امکانات جدید به wpf اضافه شده‌اند که من هنوز از بیشتر آنها سر در نمی‌آورم:

  • UI Automation
  • UI Virtualization
  • Routed Events
  • Attached Properties
  • Property change notification
  • XBAP

Comments

  1. hajloo

    خود من از وقتی که با xml آشنا شدم برام سوال پیش اومده بود که چرا تصاویر رو با فرمت xml ذخیره نمی کنن که بعد از چندین سال شرکت ماکرومدیا ( که بعدها ادوبی اون رو خرید ) توی برنامه فلش برای ذخیره انیمیشن ها و … از xml استفاده کرد.
    اون موقع زیاد متوجه کاربرد این داستان نشده بودم چون فلش کار نکرده بودم تا اینکه مایکروسافت اومد و جا پای ماکرومدیا و شرکتهای قدیمی تر گذاشت و تصاویر رو ( هر تصویری حتی gif رو) با فرمت xaml ذخیره کرد. در حال حاضر در بسته expression مایکروسافت برنامه design (گرافیک ) کارش تولید آبجکتهای xaml هست ( مثلا یک آیکن با فرمت زمل.

    تا اینکه این بحث زمل حتی به دات نت هم اومد و یک فرمت جدید برای ایجاد فرم ها رو پیشنهاد کرد چه تحت وب و چه تحت ویندوز. فرمهای زمل تحت وب با فرمت XBAP ذخیره و مشاهده میشن و وقتی شما یک برنامه زمل رو تحت وب می خواید ببینید باید یک activex (مثل فلش پلیر) رو روی مرورگرتون نصب کنید

    یک بحثی هم هست و اون اینکه شما وقتی IE8 رو نصب می کنید (چون صرفا روی ویستا به بالا تر قابلیت نصب داره پس دیگه احتیاجی به نصب activex ندارید چون روی ویندوز ویستا به بالاتر دات نت ۳.۵ نصب هست (البته برای فایلهای تحت وب باید این activex نصب شه که ie8 بصورت پیش فرض این کار رو می کنه (البته هنوز رسما اعلام نشده )

    یک چیز دیگه هم هست و اون هم اینه که یک چیزی هست به اسم WPF-E که مخفف WPF-Everywhere هست و صرفا محدودیت ۱۵ – ۲۰ تا کنترل داره و قراره مایکروسافت بزودی اون رو بطور رسمی عرضه کنه. با این کار اگر شما با این تعداد کنترل برنامه‌ای تولید کنید همه جا قابل اجرا هست

    در مورد wpf فعلا چیزی که خیلی دست همه رو بسته کمبود تعداد کنترلها برای استفاده است چون هنوز خیلی از شرکتها برای wpf کنترل ایجاد نکردن. بخصوص کمبود تقویم هجری رو میشه مثال زد برای ایرانیها

    ایجاد کنترلها بر اساس wpf هم اونطور که من متوجه شدم دردسر داره و نکات مختلفی باید رعایت بشه (یک چیزی مثل ایجاد کنترل های سفارشی آژاکس که باید درگیر جاوااسکریپت و … بشید )

    از نگارش این مطلب هم سپاسگذارم فقط ای کاش کمی این ۱۱ موردی که ذکر کردید به ۲۰ تا گسترش می دادید چون واقعا خیلی چیزهای مهمتر هم بود مثلا همین wpf-e و …. باز هم سپاس

  2. سعيد مقيمي

    سلام افشار جان
    سال نوت مبارك و بيشتر از اون بهار و آواز شكوفه ها و جوونه ها و برات يه عالمه چيزهاي خوشگل و شاد و شيرين آرزو مي كنم.
    انتخاب مصداقش با خودت.
    شادباشي و پاينده
    اينجا كه آيكون گل نداره ؟!!!
    @};-
    اين رو بريز توي مسنجر ياهو تا گلت رو نشون بده D:

  3. ناشناس

    سلام جناب افشار
    با تشکر از مطالبی که گذاشتید.لطفا یک منبع کامل در مورد wpf معرفی کنید
    با تشکر

  4. افشار محبی

    اگر خودم من بخواهم wpf را یاد بگیرم از همان کتاب معرفی شده استفاده می‌کنم. اگر با آن کتاب راحت نیستید از آقای حاجلو (hajloo.wordpress.com) کمک بخواهید

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *