‫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