# برنامه نویسی با محصولات مایکروسافت > برنامه نویسی مبتنی بر Microsoft .Net Framework > WPF > سوال: محدودیت ها و مزایای WPF  نسبت به  WinForm

## Mehdi Naderi

سلام
نیاز  مبرم به راهنمایی دوستان 
1-  محدودیت ها و نقاط قوت WPF  نسبت به WInForm
2- ایا یک برنامه کاربردی رو میشه بطور کامل با WPF  نوشت  و از کامپوننت های  Windows Form
 استفاده نکرد
3- ایا میتوان WinForm و WPF  را در یک پروژه با هم استفاده کرد؟
4- چرا با وجود گرافیک بالا و طراحی راحت برنامه های   WPF  (Microsoft Expression Blend) انطور که باید و شاید از WPF  استقبال نمیشه
5- جایگاه WPF  در ویندوز 8
6- چرا بیشتر برنامه ها که در ان از کنترلر کینکت مایکروسافت استفاده شده  از WPF  استفاده میشه  و نه WinForm

با تشکر

----------


## mze666

1) من با هر دوشون کار کردم (هم WPF و هم Win Form) و هیچگونه محدودیتی تا حالا توی WPF ندیدم - نقاط قوت WPF خیلی زیاد هست ولی دو مورد خیلی اصلی داره یکی ظاهر کاربرپسند اون و دیگری Data Binding فوق العادش. (به نظرم محدودیت یعنی خود Win Form!)
2) بله خیلی راحت و یکی از مواردی که WPF به خاطرش ایجاد شد همین بود که مدام برای هر کاری نیاز به Component نداشته باشی. توی WPF خیلی راحت میشه کنترل مخصوص خودتون رو درست کنید.
3) فکر کنم میشه ولی به نظرم اصلاً راه حل خوبی نیست.
4) اتفاقاً از WPF هم خیلی استقبال شده ولی یه چیزی که هست اینه که حجم مطالب WPFیه مقدار زیاده و خیلی ها به همین خاطر سراغش نمیان در حالی که اگر WPF رو یاد بگیرن تازه میفهمن که با Windows Form چه عذابی میکشیدن!
5) WPF و Xaml توی Win 8 هم پشتیبانی میشن (توسعش ادامه پیدا میکنه).
6) نمیدونم!

خیلی از افراد به WPF فقط به چشم ظاهر زیبا نگاه میکنن! در حالی که امکانات WPF خیلی بیشتر از این هست.
نکته دیگه این که میگن با WPF نمیشه برنامه های تجاری و بزرگ (LOB) نوشت که این مورد هم کاملاً اشتباه هستش چون Data Binding قوی WPF کار رو برای نوشتن راحت و سریع این نوع برنامه ها هم خیلی راحت میکنه.

----------


## birtemp

سلام دوستان عزیز.
من یک لینک برای شما قرار می دم که تو اون مقایسه ای نسبتاً کوتاه بین تکنولوژی wpf و win form انجام شده. تو این مقایسه ، زمان بارگذاری یا لود برنامه و میزان حافظه مصرفی هر دو تکنولوژی با هم مقایسه شده اند.
در ضمن مطالب جالبی در مورد wpf تو این سایت قرار داده میشه. چون یک از اهدف این سایت معرفی امکانات و آموزش هایی از wpf می باشد.

*مقایسه تصویری بین WPF و Windows Form – زمان شروع و حافظه*

----------


## Amir Oveisi

علاوه بر این که سیستم Rendering‌ در WPF از Direct X استفاده می کنه (Win From‌ها از GDI+ استفاده می کنند)، باید گفت که ساختار WPF App‌ ها کاملا متفاوت است. از سیستم Property‌ ها بگیرید تا سیستم Event ها، کنترل ها، Binding ها، Style ها، Template ها، Validation ها، Command ها، Animation ها، StoryBoard ها و ... همشون مفاهیم جدیدی هستند که تو WPF‌ وجود دارند.
از هر زاویه که در نظر بگیرید WPF App ها گوی سبقت را به سادگی از Win Form ها خواهند ربود. البته یک نکته وجود داره که Minimum System Requirement های WPF App ها مقداری بالاتر از Win App هاست که البته این موضوع هم با توجه به پیشرفت سخت افزارها منجر به مشکل نخواهد شد.

----------


## مهدی فرزاد

سلام
تمام موارد و امکانات و قابلیت های WPF درصورتی برتری محسوب میشود که شما برای نوشتن برنامه های wpf به سبک Win_app برنامه ننویسید چه از لحاظ برقرای ارتباط با دیتابیس چه استفاده از کنترل ها و چیدمان اونها و خاصیت های آنها و ...
در غیر این صورت توفیقی حاصل نخواهید کرد

----------


## hakim22

مشکل اصلی WPF بالاتر رفتن زمان طراحی فرمها و اینترفیس برنامه است. درسته که ایجاد کامپوننت راحته اما اینجور کارها وقت گیره. 
واقعا برنامه ای که مینویسید باید نیاز به محیط گرافیکی خوبی داشته باشه که بیایید و از WPF استفاده کنید. مزایاش خیلی زیاده و یعنی بیش از حد زیاده و به جرعت میگم خود VS و Blend هم نتونستن محیط برنامه نویسی کاملی براش درست کنند. در واقع منوها و ابزار گنجایش این همه قابلیت رو نداره هنوز .
اینترفیس خوب رو فقط میشه با Blend ساخت و کد خوب رو هم فقط میشه با VS نوشت. این یعنی شما باید در استفاده از هر دو نرم افزار مسلط بشید
نمیشه همینجوری شروع کرد و کنترل روی کنترل کذاشت. برای خیلی از فرمهای پر کردن اطلاعات دیتابیسی باید زحمت بکشید که یک فرم ساده در WPF  ایجاد کنید. 
اما بعدش Binding به کمکتون میاد و خیلی از زحمات معمول کد نویسی توی Win form رو حذف می کنه.

----------


## Mehdi Naderi

ویندوز 8 باعث مطرح شدن XAML  در دنیای برنامه نویسی مایکروسافت میشه و خود WPF هم در طراحی خود از XAML  بهره میگیره
 با ابن وجود برخی برنامه نوسیان    WPF صحبت از کمرنگ شدن نقش    WPF  و سیلورلایت در ویندوز 8  میکنند و بابت این امر مایکروسافت رو سرزنش میکنند  علت این نگرانی آنها چیه ؟

----------


## Amir Oveisi

شایعاتی بوده که به نظر من دیگه بی معنی هستند.
همه نگران بودند که مایکروسافت چرا تو نسخه 5 expression blend پروژه های wpf رو قرار نداده و پیش بینی می کردن که قراره مایکروسافت دیگه توسعه اش نده. اما با قرار دادن همه قابلیت های expression blend در خود visual studio 2012 و توسعه wpf library تو دات نت 4.5 مطمعن باشید که چنین اتفاقی نخواهد افتاد. 
به وجود اومدن metro style به عنوان نسل جدید برنامه های مایکروسافت بیشتر دلیل جذب برنامه نویس های غیر مایکروسافتی بوده تا تغییر مسیر برنامه نویس های فعلی مایکروسافتی. به همین دلیل هم هست که امکان ساخت metro style ها با استفاده از ابزار های غیر مایکروسافتی (مثل html  و css و js) وجود داره.
در واقع metro style قراره که در عرض تکنولوژی های فعلی قرار بگیره و عامل حذف بقیه نمیتونه باشه به هیچ وجه. (اصلا ماهیتش هم یه جوری هست که ذاتا نمیتونه جای بقیه رو بگیره)

موفق باشید.

----------


## Amir Oveisi

> مشکل اصلی WPF بالاتر رفتن زمان طراحی فرمها و اینترفیس برنامه است. درسته که ایجاد کامپوننت راحته اما اینجور کارها وقت گیره. 
> واقعا برنامه ای که مینویسید باید نیاز به محیط گرافیکی خوبی داشته باشه که بیایید و از WPF استفاده کنید. مزایاش خیلی زیاده و یعنی بیش از حد زیاده و به جرعت میگم خود VS و Blend هم نتونستن محیط برنامه نویسی کاملی براش درست کنند. در واقع منوها و ابزار گنجایش این همه قابلیت رو نداره هنوز .
> اینترفیس خوب رو فقط میشه با Blend ساخت و کد خوب رو هم فقط میشه با VS نوشت.


با این بخش از حرفاتون مخالفم. قابلیت های گرافیکی برای ساخت ظاهر برنامه تنها بخش کوچکی از قابلیت های WPF App ها محسوب میشه. یعنی حتی اگر شما به ظاهر کاربری در حد win app های ساده هم بسنده می کنید، دلیل نمیشه که از WPF استفاده نکنید.
در مورد زمان بر بودن ساخت ظاهر کاربری با WPF هم باید بگم که همش به خاطر این بوده شاید که مفاهیم جدیدی توش وجود داره و برای کسانی که تازه شروع می کنند زمان بر جلوه می کنه. ولی مطمئن باشید بعد از مدتی خیلی سریع تر خواهد براتون. در ضمن شما فقط به ساخت ظاهر برنامه برای اولین بار فکر نکنید، به یک پروژه بزرگ نگاه کنید که ممکنه پس از یک بار ساخته شدن، چندین بار دچار تغییر و تحول بشه. اون وقت خواهید دید که اعمال این تغییرات تو WPF App چقدر سریع تر از یک win app خواهد بود.
در مورد اینکه ظاهر خوب رو فقط میشه با expression blend ایجاد کرد و کد خوب رو فقط میشه با vs نوشت کاملا مخالفم! این امر کاملا بستگی داره به فرد، سلیقه اش و میزان حرفه ای بودنش. بعضی های ممکنه کد زدن با notepad (هم xaml و  هم cs) براشون راحت تر و جذاب تر باشه. بعضی ها ممکنه همه کدهای Xaml رو دستی کد بزنن (و مطمئن باشید وقتی راه بیفتید این راه خیلی سریع تر از کار کردن با expression blend هست). و بعضی ها هم ممکنه راحت باشند که همه کار ها رو با Expression blend انجام بدن.

----------


## homan1374

به عنوان یک برنامه نویس که از سال 2008 تا به حال به Wpf برنامه مینویسم(یعنی از سال ظهور این تکنولوژی)
میتونم بگم wpf معرکست....بزرگترین دلیلی که من از دات نت و سی شارپ به سمت زبون دیگه ای نرفتم همین wpf بوده و هست!
مفاهیم خیلی زیادی داره ولی وقتی یاد بگیرید..برنامه نویسی با استفاده از تکنولوژی wpf رو با هیچی عوض نمیکنید!

----------


## PetekDincos

> به عنوان یک برنامه نویس که از سال 2008 تا به حال به Wpf برنامه مینویسم


با سلام
تکنولوژی WPF برای اولین بار تو کنفرانس PDC 2006  معرفی شد و می توانستید با اضافه کردن Extension هایی با VS 2005  نیز باهاش کار کنید . با تشکر

----------


## homan1374

ممنون..نمی دونستم

----------


## NaserHadi

با سلام 
دوستان در مورد سوال سوم آقای نادری :1-آیا میتوان WinForm و WPF را در یک پروژه با هم استفاده کرد؟
میشه بیشتر توضیح بدید؟
2-ایا برای برنامه نویسی با wpf یکبار برای همیشه برنامه نویسی با winForm رو کنار گذاشت ؟
3- آیا در پروژه های wpf با زبانهای موجود در net. برنامه نویسی میشه ؟ و انموقع نقش xaml چیه
با تشکر

----------


## homan1374

1.بله راهایی وجود داره..ولی به طور کلی توصیه نمیشه و منطقی نیست
2.خیر..این بستگی به خودتون داره
3.بله با یکی از زبون های دات نت برنامه نویسی میشه..نقش xaml طراحی ظاهر برنامست.. مثل HTML/CSS

----------


## sia_2007

نقش اصلی تو WPF رو XAML بر عهده داره
الآن دنیا رسیده به جایی که شما با تگ ظاهر برنامه رو طراحی می کنید، حالا چه HTML، چه XAML و ...
چون هم منعطف تر هستش و هم سرعت توسعه بالاتری رو به برنامه نویس می ده، فرض کنید بتونید Tooltip یه کنترل رو به دلخواه طراحی کنید، تو Header یه Tab Item هر چی خواستید نمایش بدید، Combo Box های چند ستونه داشته باشید، با کمترین حجم کد
علاوه بر این، امکاناتی مثل Animation , Effect , Style , Trigger  و خیلی امکانات دیگه زیبایی مثال نزدنی رو برای برنامه ایجاد می کنه
همچنین WPF پشتیبانی خیلی بهتری از Object Oriented Programming ارائه می ده
و همچنین شما با یادگیری XAML ، می تونید هم WPF، هم Silverlight،  هم Windows Phone 7، هم Windows 8 رو به عنوان سکوهای کاری خودتون انتخاب کنید
در نهایت WPF، پشتیبانی بهتری از Design Pattern داره و به خوبی از MVVM پشتیبانی می کنه، و در نهایت برای DI و AOP و بسیاری کارهای دیگه امکانات ارائه می کنه، 
واقعا WPF محشره، به شرطی که درست یاد بگیرید
موفق و پایدار باشید

----------


## NaserHadi

با تشکر از پاسخ شما دو دوست عزیز
پس حالا اگه یک پروژه ای  که با winApp  طراحی شده  و تمام شده است رو بخواهیم ظاهرش رو با استفاده از wpf طراحی و اصلاح و کاربر پسند تر کنیم اونموقع راه حل چیه؟

----------


## R_Rajaee_Rad

> با تشکر از پاسخ شما دو دوست عزیز
> پس حالا اگه یک پروژه ای  که با winApp  طراحی شده  و تمام شده است رو بخواهیم ظاهرش رو با استفاده از wpf طراحی و اصلاح و کاربر پسند تر کنیم اونموقع راه حل چیه؟


شما اگر برنامه ات رو با winapp ساختی دیگه برای ظاهرش باید بری سراغ اسکین و اینجور چیزها-نهایتش بتونی با کامپوننت هایی مثل تلریک بیایی مثلا دیتاگرید تون رو عوض کنید
اگر بخوای با wpf برنامه رو زیبا کنی باید از اول بسم الله برنامه تون رو با این تکنولوژی از اول بنویسید!

----------


## Amir Oveisi

> اگر بخوای با wpf برنامه رو زیبا کنی باید از اول بسم الله برنامه تون رو با این تکنولوژی از اول بنویسید!


نه الزاما!
اگر پروژه win form app ای که هست، به درستی طراحی و پیاده سازی شده باشه، میشه از کلاس های لایه های model و business (شاید با تغییرات خیلی کم) تو پروژه wpf app هم استفاده کرد.

----------


## R_Rajaee_Rad

> نه الزاما!
> اگر پروژه win form app ای که هست، به درستی طراحی و پیاده سازی شده باشه، میشه از کلاس های لایه های model و business (شاید با تغییرات خیلی کم) تو پروژه wpf app هم استفاده کرد.


همیشه یه راه گریزی هست...ولی بهتره در فازهای تحلیل پروژه تکنولوژی ها و ابزارهای ساخت برنامه انتخاب بشن و حتما مورد بررسی قرار بگیرن تا یهو وسط کار یا بعد از اتمام کار به فکر دوباره نویسی یا تغییرات گسترده نباشیم

----------


## armsoftpc

سلام 



> گر پروژه win form app ای که هست، به درستی طراحی و پیاده سازی شده باشه،  میشه از کلاس های لایه های model و business (شاید با تغییرات خیلی کم) تو  پروژه wpf app هم استفاده کرد.


من متوجه نشدم که چگونه باید این کار را انجام دهیم.

----------


## Mehdi Naderi

> 4- چرا با وجود گرافیک بالا و طراحی راحت برنامه های   WPF  (Microsoft Expression Blend) انطور که باید و شاید از WPF  استقبال نمیشه
> 5- جایگاه WPF  در ویندوز 8
> 6- چرا بیشتر برنامه ها که در ان از کنترلر کینکت مایکروسافت استفاده شده  از WPF  استفاده میشه  و نه WinForm


با تشکر از  دوستان عزیز 
لطفا در مورد سه سوال اخر راهنمایی نمائید

----------


## sia_2007

4- اغلب پروژه های جدید مبتنی بر #C، که همین الآن دارن تو کشورمون شروع می شوند، با WPF، یا Silverlight هستن
5- WPF در NET. هستش، و NET. توی Windows 8 معمولی پشتیبانی میشه، Windows 8 معمولی همون ویندوزی هستش که شما می خوای روی Laptop، Notebook یا PC تون نصب کنید
یه مدل دیگه از Windows 8 هستش به نام Win-RT که روی پردازنده های ARM کار می کنه، که اون NET. رو ساپورت نمی کنه، کلا خیلی آیتم های دیگه رو هم ساپورت نمی کنه
تو اون شما می تونید با استفاده از XAML برنامه های جدیدی به سبک Metro Style بنویسید
اگه دقت کنید Surface مایکروسافت ( Tablet جدیدش )، دو نسخه داره، که یکی حدودا 600 دلاره، اون یکی 1100 دلار
1100 دلاریه معمولیه، 600 تایی Win RT هستش، مزیت Win RT مبتنی بر ARM بودنش هستش که باعث میشه هزینه سخت افزاریش کمتر باشه، مصرف برقش کمتر باشه، ولی ضعفش اینه که 
هر چیزی رو اجرا نمی کنه، از جمله NET. و Silverlight و Photoshop و ...

----------


## Amir Oveisi

> همیشه یه راه گریزی هست...ولی بهتره در فازهای تحلیل پروژه تکنولوژی ها و ابزارهای ساخت برنامه انتخاب بشن و حتما مورد بررسی قرار بگیرن تا یهو وسط کار یا بعد از اتمام کار به فکر دوباره نویسی یا تغییرات گسترده نباشیم


اصلا نیاز به راه گریز نیست. اصل معماری سه لایه و هدفش اینه که لایه های رو از هم جدا و مستقل کنیم. چرا میخوایم این کار رو بکنیم؟ برای اینکه قابلیت استفاده مجدد از ماژول های داخل برنامه افزایش پیدا کنه و هزینه اعمال تغییرات و توسعه نرم افزار کاهش پیدا کنه.
اگر طراحی و تکنیک ما برای تولید لایه های مدل و business درست و منطبق بر اصل عدم وابستگی به لایه های دیگه باشه، اون موقع میتونیم با هزینه ای کمتر از دوباره نویسی اون ماژول ها تو پروژه جدید، اونا رو بیاریم تو پروژه جدید و تغییرات محدود و کمی رو روشون اعمال کنیم تا با تکنولوژی جدید سازگار بشه.

باز هم تاکید می کنم، معماری چند لایه اینجور جاهاست که به درد می خوره.

----------


## NaserHadi

1-آقای اویسی منظورتون از لایه مدل چیه؟ چون برنامه سه لایه معمولا باید مثل شکل زیر  باشه؟

3tier_thumb[1].jpg

2- و نیز اونطور که من فهمیدم اگر در یک برنامه لایه های BusinessLogicLayer و DataAccessLayer درست طراحی و از هم تفکیک بشن در یک پروژه جدید Wpf میتوان به راحتی این دو لایه را انتقال داد و فقط لایه Presentation (یا UserInterface) هست که با یک تکنولوژی دیگه طراحی طراحی میشه آیا درسته؟

----------


## NaserHadi

پس اگه من منظور آقای اویسی ر و درست فهمیده باشم با کمترین هزینه میشه یک پروژه WinApp  رو به یک پروژه WpfApp  تبدیل کرد به شرطی که  برنامه بر پایه اصول معماری چند لایه طراحی شده باشه

----------


## Amir Oveisi

دقیقا همینطوره.
منظور بنده از لایه مدل، همون مفهوم مدل تو الگوی MVVM هست. در اصل میشه مدلی از موجودیت (Entity) هایی که قراره در لایه Business (یا ViewModel) باهاش کار بشه و تو لایه  Presentation (یا View) به کاربر نشون داده بشه.

دیاگرام زیر فکر کنم واضح تر باشه:

----------


## NaserHadi

یک سوال 
آقای اویسی آیا الگو ی زیر برای طراحی یک برنامه چند لایه کافیه یا اینکه نه این الگو تغییر یافته 
و اگه ممکنه یک مقایسه هم در مورد الگویی که خودتون برای MVVM فرستادید رو با این الگو ی زیر انجام بدید 

با تشکر
3tier_thumb[1].jpg

----------


## NaserHadi

آقای اویسی لطفا در مورد الگوی MVVM و سوال پرسیده شده در پست قبلی کمی صحبت کنید 
با تشکر

----------


## NaserHadi

با اینکه آقای اویسی مستقیما جواب این سوال رو ندادند ولی من پاسخ این سوال رو در یک تاپیک دیگه و از خود ایشان پیدا کردم که همینجا لینک اونو میذارم

https://barnamenevis.org/showthread.p...%D9%87+%D9%86%


با این حال اگه مطلبی مونده باشه لطفا این بحث رو ادامه بدید

----------


## va2012

سلام

خوب تا اینجا همه از مزایا و برتری WPF در برابر Win App گفتن. حالا لطفا یکم از معایب WPF بگین. من خودم چند ماهی هست که WPF رو شروع کردم  و به قول دوستان یادگیریش زمان خیلی بیشتری میبره و  احساس میکنم که یکم هم کار کردن باهاش سخت تره. ( البته شاید با کسب تجربه بیشتر حل بشه)

----------


## NaserHadi

لینک زیر هم میتونه مفید باشه در مورد معماری MVVM بامثال توضیحات کافی وجود دارد
https://barnamenevis.org/showthread.p...زمینه-WPF

در مورد معایب من هم فکر میکنم که اینطور باشه  یادگیریش سخت و زمان بره

----------


## Mehdi Naderi

چرا بیشتر برنامه هایی که کنترولر کینکت مایکروسافت در آن استفاده میشه با   WPF  نوشته میشه؟

----------

