عند إنشاء واجهة مستخدم رسومية جديدة، هل يكون WPF هو الخيار المفضل على Windows Forms؟[مغلق]

StackOverflow https://stackoverflow.com/questions/57909

سؤال

معظم القيود والحيل المتعلقة بنماذج Windows شائعة لدى معظم المبرمجين.ولكن منذ الإصدار .NET 3.0، يتوفر أيضًا WPF، وهو Windows Presentation Foundation.يُقال أنه يمكنك جعل "التطبيقات المثيرة" أكثر سهولة باستخدامها، ومع .NET 3.5 SP1، حصلت على زيادة جيدة في سرعة التنفيذ.

ولكن على الجانب الآخر، هناك الكثير من الأشياء التي تعمل بشكل مختلف مع WPF.لن أقول أن الأمر أكثر صعوبة ولكن عليك أن تتعلم "كل شيء" من الصفر.

سؤالي:هل يستحق قضاء هذا الوقت الإضافي عندما يتعين عليك إنشاء واجهة مستخدم رسومية جديدة ولا يوجد ضغط زمني للمشروع؟

هل كانت مفيدة؟

المحلول

يمكّنك برنامج WPF من القيام ببعض الأشياء الرائعة، وأنا أحبه...ولكنني أشعر دائمًا بأنني ملزم بتأهيل توصياتي، كلما سألني المطورون عما إذا كان ينبغي عليهم الانتقال إلى التكنولوجيا الجديدة.

هل مطوروك على استعداد (ويفضل أن يكونوا متحمسين) لقضاء الوقت المستغرق لتعلم استخدام WPF بشكل فعال؟لم أفكر أبدًا في قول هذا عن MFC، أو Windows Forms، أو حتى DirectX غير المُدار، ولكن ربما لا تريد أن يحاول فريق "التقاط" WPF على مدار عملية التطوير العادية.دورة لمنتج الشحن!

هل يتمتع واحد أو اثنين على الأقل من المطورين لديك ببعض حساسيات التصميم، وهل يتمتع الأفراد الذين يتمتعون بسلطة التصميم النهائي بفهم جيد لقضايا التطوير، حتى تتمكن من الاستفادة من إمكانات WPF لإنشاء شيء أفضل في الواقع، بدلاً من مجرد المزيد من "الملونة" ، ويضم الرسوم المتحركة لا مبرر له؟

هل تعمل نسبة معينة من قاعدة العملاء المستهدفين على مجموعات شرائح الرسومات المدمجة التي قد لا تدعم الميزات التي كنت تخطط لها - أم أنهم ما زالوا يستخدمون نظام التشغيل Windows 2000، مما قد يؤدي إلى إقصائهم كعملاء تمامًا؟قد يتساءل بعض الأشخاص أيضًا عما إذا كان عملاؤك يهتمون فعليًا بالمرئيات المحسنة، ولكن بعد أن عايشت المناقشات الداخلية للشركة "عملاء الأعمال لدينا لا يهتمون بالألوان والصور" في أوائل التسعينيات، أعلم أن الحلول المصممة جيدًا من منافسيك سوف تجعلهم يهتمون، والسؤال الحقيقي هو ما إذا كانت الظروف مناسبة، لتمكينك من تقديم شيء من شأنه أن يجعلهم يهتمون الآن.

هل يتضمن المشروع تطويرًا أساسيًا، على الأقل بالنسبة لطبقة العرض التقديمي، لتجنب التعقيد الإضافي لمحاولة الارتباط بالسقالات القديمة غير المتوافقة (التفاعل مع Win Forms ليس سلسًا)؟

هل يمكن لمديرك قبول (أو صرف انتباهه عن ملاحظة) انخفاض كبير في إنتاجية المطورين لمدة أربعة إلى ستة أشهر؟

ترجع هذه المشكلة الأخيرة إلى ما أحب أن أفكر فيه كطبيعة "FizzBin" لـ WPF، مع عشر طرق مختلفة لتنفيذ أي مهمة، ولا يوجد سبب واضح لتفضيل نهج على آخر، والقليل من الإرشادات المتاحة لمساعدتك في إجراء خيار.لن تصبح عيوب أي خيار تختاره واضحة فقط في وقت لاحق من المشروع فحسب، بل نضمن لك فعليًا أن يتبنى كل مطور في مشروعك نهجًا مختلفًا، مما يؤدي إلى حدوث صداع كبير في الصيانة.الأمر الأكثر إحباطًا على الإطلاق هو التناقضات التي تزعجك باستمرار أثناء محاولتك تعلم إطار العمل.

يمكنك العثور على مزيد من المعلومات المتعمقة المتعلقة بـ WPF في إدخال على مدونتي:

http://missedmemo.com/blog/2008/09/13/WPFTheFizzBinAPI.aspx

نصائح أخرى

بعد ثلاثة أشهر من محاولة التوصل إلى خط ادارة الاعمال (LOB) على WPF، وصلت إلى نقطة التفكير في العودة إلى Windows Forms لمشروعي، وأثناء البحث عن آراء الآخرين، صادفت هذا الموضوع...

نعم، WPF هي تقنية رائعة ولها فوائد تتجاوز مجرد حلوى العين...تعد إمكانات القوالب والربط أمثلة رائعة.يوفر نموذج الكائن بأكمله مرونة أكبر وإمكانيات أوسع.ومع ذلك، فإن هذا لا يجعلها منصة فعلية لتطبيقات LOB المستقبلية.

"المشكلات" التي يحلها WPF فيما يتعلق بفصل واجهة المستخدم الرسومية عن منطق الأعمال ليست مشكلات لا يمكن حلها بسهولة في Windows Forms بمجرد البدء بالبنية والعقلية الصحيحة.حتى إمكانيات ربط مسار الكائن لـ WPF يمكن إعادة إنتاجها في Windows Forms مع بعض الفئات المساعدة البسيطة جدًا.تعد إمكانيات قالب البيانات الخاصة بـ WPF رائعة جدًا، ولكنها مرة أخرى ليست شيئًا لا يمكنك محاكاته في Windows Forms في تلك المناسبات النادرة عندما لا تعرف تمامًا الكائنات التي ستمثلها في أي جزء معين من الشاشة.

حيث يتقدم Windows Forms للأمام من حيث النضج.لا يمكنك تأرجح قطة ميتة على Google دون الوصول إلى إحدى المدونات حيث قام شخص ما بحل مشكلة Windows Forms لك.من ناحية أخرى، لدى WPF موارد تعليمية أقل نسبيًا، وعدد أقل من عناصر التحكم المخصصة المتاحة، ولم يتم حل العديد من مشكلاته الأولية.

في ذروة اتخاذ قرار بشأن WPF مقابل Windows Forms، يجب أن يكون نضج بيئة التطوير.تتميز برامج تحرير Windows Forms بأنها سريعة الاستجابة وبديهية.تصلك التعليقات حول الأخطاء على الفور، وعادة ما تكون الحلول واضحة، وتكون دورة الترجمة->التصحيح->التحرير في Windows Forms سريعة جدًا.

من ناحية أخرى، تتمتع تطبيقات WPF بدعم وقت تصميم مثير للشفقة نسبيًا، مع عرض التصميم جاهز تمامًا للتهرب عند أول مواجهة لخطأ، وغالبًا ما يتطلب إنشاء مشروع بعد الإصلاح قبل أن يكون المصمم على استعداد للبدء مرة أخرى.قد لا يكون سحب وإسقاط المكونات من صندوق الأدوات مدعومًا أيضًا، نظرًا للنطاق الواسع من الظروف التي لا يعمل فيها على الإطلاق، أو يؤدي إلى نتائج غير بديهية تمامًا.على الرغم من وعد WpfToolkit، لا يوجد حتى الآن DataGrid قابل للاستخدام لـ WPF والذي ينتج أي نوع من الأداء المعقول أو ملاءمة وقت التصميم.

يشبه تصحيح أخطاء تطبيقات WPF إلى حد ما عملية تصحيح أخطاء تطبيقات WPF قديم نموذج تصحيح أخطاء ASP.NET...يضرب F5 -> انتظر -> الإطلاق -> خطأ -> توقف -> إصلاح -> اضغط F5 -> انتظر -> الإطلاق -> خطأ -> تأوه -> توقف -> إصلاح -> ضرب F5....يتم قفل كافة ملفات XAML التي يقوم برنامجك بتشغيلها، وغالبًا ما يكون تتبع مشكلات XAML المحددة أمرًا شاقًا.

خلاصة القول، ببساطة، هي أن أدوات التطوير الخاصة بـ Windows Forms ستجعلك تتفوق على الواجهات الأمامية في جزء صغير من الوقت الذي يستغرقه تطبيق WPF... خصوصاً إذا كنت تقوم بإنشاء شبكات تفصيلية رئيسية أو واجهات تشبه جداول البيانات، والتي تمتلكها معظم LOB.باستخدام Windows Forms، تبدأ بـ 90% من العمل الذي تم إنجازه بالفعل من أجلك.

أنا من أشد المعجبين بهندسة WPF.أتمنى فقط ألا تبدو مجموعة أدوات وقت التصميم وكأنها عملية تصحيح أخطاء ما قبل ألفا.


يحرر:تم نشر هذه الإجابة حول .NET 3.5 + Visual Studio 2008، ولكن يأتي .NET 4.0 مع Visual Studio 2010 مزودًا بشبكة بيانات WPF.على الرغم من إجراء العديد من التحسينات على تجربة تطوير WPF الجديدة، إلا أن إجابتي هنا تظل دون تغيير، وأود إضافة الاقتراح التالي:

إذا كنت في عجلة من أمرك للقيام به راد التطوير، اذهب مع Windows Forms.إذا كنت تتطلع إلى إنتاج تطبيق خط أعمال مصمم بشكل جيد، وقابل للصيانة، وقابل للتطوير، وصديق للموارد، ومتعدد المستخدمين، ففكر في ASP.NET MVC + HTML 5 + jQuery...لقد أدت مشاريعي باستخدام هذه التقنيات إلى تحقيق نتائج أفضل لعملائي في وقت أقرب.يقدم MVC نفس القوالب التي يقدمها WPF، ويتيح jQuery الرسوم المتحركة والتفاعلات المعقدة.والأهم من ذلك، أن حل ASP.NET MVC + jQuery لا يتطلب من المستخدمين النهائيين أن يكون لديهم أجهزة كمبيوتر مكتبية حديثة مزودة بأجهزة رسومات مناسبة.

لقد مرت سبعة أشهر على استخدام WPF على ما أصبح الآن نظامًا أساسيًا لعملائي، وأود أن أشارككم بعض الأفكار الإضافية حول تجربة التعلم واستخدام WPF كمنصة لعرض الأعمال.

على العموم التعليقات التي ذكرتها أعلاه ما زالت قائمة..دعم وقت التصميم لـ WPF ليس موجودًا بعد.إذا كنت في عجلة من أمرك للحصول على تطبيق غني بالعميل، فانتقل إلى Windows Forms.فترة.Microsoft ليست في عجلة من أمرها لإيقاف نظام GDI / Windows Forms الأساسي، لذا يمكنك الاعتماد على الدعم الجيد لفترة معقولة في المستقبل.

ليس من السهل إتقان WPF, ، ولكن لا ينبغي أن يكون هذا هو المكان الذي تترك فيه قرارك بشأن استثمار وقتك وطاقتك في تعلم WPF أم لا.على الرغم من افتقاره الحالي إلى النضج، إلا أن WPF مبني على بعض المفاهيم الحديثة والمفيدة.

في WPF، على سبيل المثال، يعد استثمارك في كائنات الأعمال المكتوبة جيدًا مع منطق التحقق السليم استثمارًا قويًا.على عكس Windows Forms، فإن ربط بيانات WPF مليء بالميزات التي تسمح لعناصر التحكم في الواجهة بالتفاعل مع إدخالات المستخدم غير الصالحة دون كتابة رمز واجهة المستخدم الرسومية لاكتشاف تلك الأخطاء.هذا أمر ذو قيمة.

أثبتت إمكانيات التصميم والقوالب في WPF أنها ذات قيمة أيضًا.على الرغم من الاعتقاد الخاطئ الشائع بأن الاستخدام الوحيد للتصميم والقوالب هو إنشاء حلوى على الشاشة، فإن الحقيقة هي أن هذه الميزات تعمل بشكل كبير على تبسيط ترميز واجهة المستخدم التي تقدم تعليقات غنية - مثل الأزرار التي تعمل على تعطيل/تمكين نفسها بناءً على حالة طبقة منطق الأعمال الأساسية، أو تلميحات الأدوات التي تجد النص الخاص بها بذكاء بناءً على حالة الكائن الموجود أسفل المؤشر، وما إلى ذلك.

كل هذه الميزات تضيف إلى ميزات قيمة بشكل لا يصدق لـ "لا شيء فاخر" تطبيقات الأعمال, ، وذلك ببساطة لأنها تجعل من السهل الحفاظ على تطابق الواجهة مع البيانات الأساسية.

شيء صغير:

  • في نماذج Windows ، تقوم بتصميم واجهة المستخدم الخاصة بك ، ثم اكتب رمزًا لقيادة واجهة المستخدم هذه ، والتي تتضمن أيضًا رمزًا بشكل عام لقيادة كائنات البيانات الخاصة بك.
  • في WPF، عليك الاستثمار في طبقة الأعمال التي تحرك كائنات البيانات الخاصة بك، ثم تصميم واجهة يمكنها ذلك يستمع إلى كائنات البيانات الخاصة بك.

يبدو هذا فرقًا بسيطًا، ولكنه يُحدث فرقًا كبيرًا في قدرتك على إعادة استخدام التعليمات البرمجية...الذي يطرح السؤال:"هل سؤال Windows Forms vs WPF هو في الواقع قرار استثماري؟"

(يبدو أن هذا أصبح موضوعي المفضل.)

هل هناك أي أسباب مقنعة لاستخدام WPF

قطعاً!WPF أمر لا يصدق على الاطلاق!ستكون هذه فائدة كبيرة لأي مشروع تقريبًا لأنها تحتوي على العديد من الميزات والقدرات التي يفتقر إليها Windows Forms.

بالنسبة لتطبيقات الأعمال، ستكون أكبر المكاسب هي:

  • يُحدث ربط البيانات والقوالب الرائعة فرقًا كبيرًا.بمجرد إنشاء نموذج بيانات لائق، لا يستغرق الأمر سوى بضع نقرات لإنشاء قالب بيانات واستخدامه مزيج التعبير لتكوين الشكل الذي سيبدو عليه الكائن بالضبط باستخدام السحب والإفلات.والارتباط بأشياء مثل اللون أو الشكل أمر تافه.
  • تخطيط الشاشة مرن بشكل لا يصدق.لا يمكن فقط ضبط كل شيء في WPF بسلاسة مع تغيرات حجم الحاوية وشكلها، ولكن يمكن تكبير العناصر وتدويرها بشكل تافه، وحتى تمديدها خارج الإطار الذي تحتوي عليه.
  • يمكن تقديم الكائنات العادية بالطريقة التي تريدها، ويمكن أن تحتوي بسهولة على عروض تقديمية مختلفة في شاشات مختلفة، ويمكنها مشاركة العرض التقديمي، ويمكنها تكييف العرض التقديمي الخاص بها مع التغييرات في قيم البيانات.
  • إذا كنت بحاجة إلى الطباعة، فإن العرض على الطابعة أمر تافه.تم تكوينه بشكل صحيح، ويجعل WPF تقارير الكريستال أو خدمات تقارير خادم SQL (SSRS) تبدو وكأنها لعبة طفل.
  • ستبدو واجهة المستخدم الخاصة بك أكثر ديناميكية، بما في ذلك الميزات الرائعة مثل الأزرار التي تتحرك عند تمرير الماوس فوقها.

بالنسبة للمرافق والألعاب، تأتي المزايا الأخرى في المقدمة:

  • يمكنك بسهولة إضافة أشكال وخطوط ورسومات عشوائية إلى تطبيقك دون استخدام محرر خارجي.يمكن أن يكون كل مكون منها مرتبطًا بالبيانات ومتحركًا، أو يتم التحكم فيه عن طريق التعليمات البرمجية.في Windows Forms، يتعين عليك عادةً استيراد صورة نقطية واستخدامها كما هي إلا إذا كنت تريد القيام بالكثير من العمل.
  • الرسوم المتحركة رائعة!سوف ينبهر المستخدمون حقًا، طالما أنك لا تبالغ في ذلك.يمكنهم أيضًا مساعدة الأشخاص على رؤية ما يجري وتقليل الحاجة إلى تسليط الضوء.على سبيل المثال، عند سحب كائن ما، يمكنك تحريك الهدف لإظهار ما سيحدث إذا أسقطته.
  • الألوان، والتعبئة المتدرجة، والفرش، والخطوط الفاخرة، وتدوير أي كائنات، وفرش البلاط، وما إلى ذلك.أي شيء تريده بيانياً هو لك لطرحه.
  • قابلة للتخصيص بشكل لا يصدق.كنت بحاجة إلى رسم مسارات السكك الحديدية لتطبيق واحد، حتى أتمكن من إسقاط قطار عليها.وبعد بضع ساعات، أصبحت لدي خطوط سكك حديدية يمكنني رسمها في أي مكان على الشاشة باستخدامها منحنيات بيزييه, ، وسوف ينضمون ويتحولون تلقائيًا.

خلاصة القول هي أن أي واجهة مستخدم رسومية كبيرة الحجم يمكنك إنشاؤها في Windows Forms يمكن بناؤها في WPF بثلث الجهد (أو أقل) وتبدو أفضل بكثير.

هل يتطلب WPF المزيد من الموارد (ذاكرة الوصول العشوائي على وجه الخصوص)

أنت تدفع ثمنًا مقارنةً بـ Windows Forms، ولكنه سعر صغير.

  • يمكن أن ترتفع ذاكرة الوصول العشوائي (RAM) لأعلى أو لأسفل اعتمادًا على التنفيذ الخاص بك.يقوم WPF بتخزين بياناته بشكل أكثر كفاءة بحيث تكون الكائنات الفردية أصغر، ولكن يميل إلى أن يكون هناك عدد أكبر من الكائنات في WPF مقارنة بنماذج Windows، لذلك يتوازن هذا، ويمكن لأي منهما أن يأتي في المقدمة.
  • سوف ترتفع وحدة المعالجة المركزية مقارنة بنماذج Windows.في تجربتي، التحديث الفعلي لكائنات WPF التي تظهر على الشاشة يستغرق حوالي ضعف وحدة المعالجة المركزية التي يستغرقها عرض نماذج Windows العادية.إذا كان تطبيقك يقضي معظم وقته في تحديث الشاشة، فقد لا يكون WPF مناسبًا لك.ولكن في هذه الحالة ربما لا تستخدم Windows Forms أيضًا:تتم كتابة معظم الألعاب الخطيرة مباشرة إلى دايركت اكس.
  • سيكون استخدام القرص أقل قليلاً بالنسبة لـ WPF لأنه يتطلب تعليمات برمجية أقل بكثير من Windows Forms.ستكون البيانات بنفس الحجم بالطبع.

ملاحظة أخرى حول استخدام وحدة المعالجة المركزية:تعد الرسوم المتحركة والتحويلات (الحركة، والترجمة، وما إلى ذلك) في الواقع أكثر كفاءة على WPF مقارنة بنماذج Windows بسبب تخزين الوضع المحتفظ به.إن الوصول الأولي للأشياء إلى هناك يكون أبطأ.

النفقات العامة للصيانة

WPF هو ضخم الفوز على Windows Forms عندما يتعلق الأمر بالصيانة.نظرًا لأن كل شيء يتم في 1/5 من التعليمات البرمجية كما كان من قبل، فهناك 1/5 من التعليمات البرمجية التي يجب الحفاظ عليها.بالإضافة إلى أن جميع العناصر المعيارية قد اختفت حتى تتمكن من التركيز على الكود الذي يقوم بالعمل بالفعل.

فوائد XAML

XAML هو جوهر WPF.على الرغم من إمكانية استخدام WPF بدون XAML، إلا أن XAML يجعلها سهلة الاستخدام بشكل لا يصدق.يتمتع XAML بقدرة HTML على تحديد واجهة مستخدم بسهولة، ولكن علاماته المضمنة أقوى بكثير، ويمكنك بسهولة تحديد علاماتك الخاصة.(في الواقع، من الطبيعي القيام بذلك).

بعض المزايا المحددة لـ XAML:

  • يتم تعريف واجهة المستخدم بأكملها في ملف نصي يسهل قراءته ومعالجته، سواء بالنسبة للمستخدمين أو الأدوات
  • تسمح MarkupExtensions بتحديد الروابط بطريقة واضحة وبسيطة
  • تسمح محولات النوع بتحديد الخصائص ذات الأنواع المعقدة بسهولة.على سبيل المثال، يمكنك قول Brush = "Green" أو يمكنك تحديد فرشاة متدرجة نصف قطرية بثلاث توقفات.
  • يمكنك إنشاء العناصر الخاصة بك
  • يمكنك بسهولة الاستفادة من "الخصائص المرفقة" القوية لـ WPF

رؤى أخرى

حلمت بشيء مثل WPF لسنوات عديدة.لقد قام العديد من الأشخاص بتنفيذ أجزاء من هذه الوظيفة، ولكن الحصول عليها كلها في مكان واحد وبهذا السعر (0 دولار) أمر مذهل.

يعد WPF بمثابة نقلة نوعية كبيرة عن Windows Forms وسيستغرق بعض الوقت للتعود عليه، ولكن الوقت الذي تقضيه في تعلمه سيعود عليه بأضعاف مضاعفة.

لا يزال WPF يعاني من بعض الثآليل حتى بعد مرور خمس سنوات، لكن قوته ستذهلك تمامًا بمجرد تجربتها.إذا حاول شخص ما جرك مرة أخرى إلى Windows Forms، فلن تفعل سوى الركل والصراخ.

نصائح:- احصل على نسخة من مزيج التعبير للتطوير - هل تحرير XAML باليد أحيانًا - لا تستسلم عندما يبدو غريباً في البداية

يتطلب WPF إما Windows Vista أو Windows XP SP2، وهو ليس مطلبًا مرهقًا، ولكنه مطلب ذو صلة.إذا كنت تريد التشغيل على نظام التشغيل Windows 2000 (وهو ما لا يزال بعض الأشخاص يستخدمونه)، فلن يعمل WPF معك.

تعد WPF أيضًا تقنية أحدث ولم يتم إثباتها مثل Windows Forms، لذا يمكنك اختيار Windows Forms كخيار أقل خطورة، خاصة بالنسبة للتطبيقات الأكبر حجمًا.

ومع ذلك، نعم WPF هو المستقبل.تتم إعادة كتابة Visual Studio 2010 في WPF، والذي من المحتمل أن يكون أكبر تطبيق WPF حتى الآن وسيكون أيضًا اختبارًا حقيقيًا لهذه التكنولوجيا.

من الواضح أن تطبيقات Windows Forms القديمة ستكون موقفًا آخر يكون فيه الاختيار الصحيح.

كما قال الآخرون، هناك مزايا وعيوب في كلتا الحالتين تذهب هنا.تشمل مزايا WPF، كما قال آخرون، ما يلي:

  • القدرة على إنشاء واجهات مستخدم غنية جدًا نسبياً بسهولة.
  • الرسوم المتحركة والمؤثرات الخاصة أسهل
  • قابلية التوسع المتأصلة (استخدم أداة التكبير لنظام التشغيل Windows Vista على تطبيق WPF، وعلى تطبيق Windows Forms:لاحظ أنه في تطبيق WPF، يتم قياس جميع الرسوم الفنية المتجهة بشكل جميل)
  • (تنبيه الرأي) أشعر أنه "من الأسهل" عمل أنظمة موجهة نحو المستندات في WPF

ومع ذلك، هناك عيوب في WPF، حيث يأتي Windows Forms في المقدمة:

  • تعد مجموعة التحكم الموجودة في WPF أكثر محدودية من تلك الموجودة في Windows Forms.
  • يوجد دعم أكبر في مساحة التحكم التابعة لجهة خارجية لـ Windows Forms.(هذا يتغير بالطبع، لكن فكر في الأمر:Windows Forms موجود منذ عام 2001؛WPF بضع سنوات فقط.وبمرور الوقت، يحظى Windows Forms بدعم أكبر في المجتمع.)
  • يعرف معظم المطورين بالفعل Windows Forms؛يوفر WPF منحنى التعلم الجديد

أخيرًا، ضع في اعتبارك أنه يمكنك إنشاء واجهات مستخدم رائعة وجذابة وجذابة في أي من الأداتين، إذا قمت بالعمل (أو استخدمت أدوات الطرف الثالث المناسبة).وفي نهاية المطاف، ليس بالضرورة أن يكون أي منهما أفضل في جميع الظروف.استخدم ما يبدو مناسبًا للمشروع.

يعد نموذج البرمجة لـ WPF أكثر انفتاحًا ومرونة من Windows Forms، ولكن مثل ASP.NET MVC، فإنه يتطلب المزيد من الانضباط فيما يتعلق بالتنفيذ الصحيح لأنماط Model-View-ViewModel.

الخاص بي أولا رفع الكرة انتهى التطبيق مع WPF باعتباره فشلًا تامًا، لأنه كان بمثابة استنزاف للموارد مما أدى إلى توقف أجهزة الكمبيوتر المحمولة منخفضة التكلفة الخاصة بالمستخدم النهائي ...وكان هذا في النهاية لأنني انضممت للتو إلى WPF + LINQ إلى SQL وتوقعت نتيجة جيدة..وهذا هو المكان الذي يختلف فيه WPF بقوة عن Windows Forms...في Windows Forms، يمكنك التخلص من هذا النوع من الأشياء.يعد WPF أثقل بكثير على الموارد من Windows Forms، وإذا لم تقم بتصميم تطبيقك ليكون بسيطًا، فسينتهي بك الأمر مع غوريلا تزن 800 رطل.

لا تخجل من WPF ...استكشاف ذلك.لكن انتبه إلى أن الأخطاء المقبولة في تشفير Windows Forms لن تؤدي إلى نتائج جيدة في WPF.إنها محركات مختلفة بشكل أساسي، وتصلح لأنماط تشفير مختلفة بشكل أساسي.

الكلمة الأخيرة:إذا قررت المضي قدمًا في استخدام WPF، فتعرف جيدًا على المحاكاة الافتراضية للبيانات لاستخدامها مع القوائم والشبكات.ما هو ListItem أو GridCell البسيط المرتبط بالبيانات ينتهي به الأمر إلى أن يكون رسمًا بيانيًا منطقيًا + مرئيًا ضخمًا للكائنات في WPF، وإذا لم تتعلم كيفية المحاكاة الافتراضية، فلن يعمل تطبيقك جيدًا على مجموعات البيانات الكبيرة.

هناك منحنى تعليمي شديد الانحدار لـ WPF، وأوصيك بالحصول على الكتب الواضحة أولاً (آدم ناثان, يبيع / غريفيث, ، وكريس أندرسون) والمدونات (جوش سميث, ، إلخ.).فقط كن مستعدًا لذلك، وتأكد من أن مشروعك يتيح لك الوقت لتعلم WPF.

بالإضافة إلى تعلم التكنولوجيا، اقض بعض الوقت في تعلم الأنماط المستخدمة لإنشاء تطبيقات WPF. نموذج عرض نموذج العرض يبدو أن (MVVM) هو الذي نال قدرًا كبيرًا من القبول.

أنا شخصياً أعتقد أن WPF يستحق ذلك ولكن كن حذرًا.لاحظ أيضًا أنك تقيد المستخدمين بشكل فعال بنظامي التشغيل Windows XP SP2+ وWindows Vista.لقد اتخذنا هذا القرار، ولكن قد يكون لديك بعض المتطلبات المختلفة.

كل من التقنيات لها إيجابيات وسلبيات.في تطبيق كبير بواجهة مستخدم "كلاسيكية"، سأستخدم Windows Forms.في أحد التطبيقات التي تتطلب واجهة مستخدم غنية (السطح، الرسوم المتحركة، تغيير واجهة المستخدم) سأختار WPF.يرجى التحقق من هذه المادة WPF مقابل.نماذج ويندوز مقارنة نماذج WPF وWindows.

بصرف النظر عن المرونة في تصميم واجهة المستخدم، هناك بعض المزايا التقنية لـ WPF:

1.) لا يعتمد WPF على كائنات GDI. حسنًا، أعتقد أنه يستخدم كائنين GDI لمثيل النافذة نفسها، لكن هذا لا شيء عمليًا.لقد شاركت إلى حد ما في تطبيق Windows Forms داخلي كبير جدًا.يقوم الأشخاص في مكتبنا أحيانًا بتشغيل 3 أو 4 حالات منه في وقت واحد.تكمن المشكلة في أنها تصل في كثير من الأحيان إلى الحد الأقصى لكائنات GDI وهو 10000 المتأصل في أنظمة التشغيل Windows 2000 وXP وVista.عندما يحدث ذلك، يصبح نظام التشغيل بأكمله غير مستجيب وستبدأ في رؤية التحف المرئية.الطريقة الوحيدة لمسحها هي إغلاق التطبيقات.

2.) يستخدم WPF وحدة معالجة الرسومات. تعد قدرة WPF على إلغاء تحميل بعض عمليات معالجة واجهة المستخدم على وحدة معالجة الرسومات أمرًا رائعًا.أتوقع فقط أن يتحسن هذا الجانب منه بمرور الوقت.باعتباري أحد هواة برمجة OpenGL السابقين، يمكنني أن أقدر القوة التي تأتي من وحدة معالجة الرسومات.أعني أن بطاقة الفيديو التي تبلغ قيمتها 100 دولار تحتوي على 112 مركزًا تعمل بسرعة 1.5 جيجا هرتز لكل منها (وهذا ليس الأفضل بأي حال من الأحوال).هذا النوع من قوة المعالجة المتوازية يمكن أن يضع أي وحدة معالجة مركزية رباعية النواة في العار.

ومع ذلك، لا يزال WPF جديدًا جدًا.ولن يعمل على نظام التشغيل Windows 2000.وفي الواقع، يمكن أن يكون تطبيق WPF بطيئًا في بدء التشغيل بعد إعادة التشغيل مرة أخرى.أتحدث عن كل هذا في مدونتي:http://blog.bucketsoft.com/2009/05/wpf-is-like-fat-super-hero.html

أعتقد أن الأمر يستحق تعلم WPF.بمجرد أن تصل إلى السرعة، يصبح العمل على التصميم على النماذج الخاصة بك أسهل بكثير IMHO.لن أقلق كثيرًا بشأن الأشياء "المثيرة".معظم هذا مجرد بدعة.يمكنك إنشاء تطبيقات بنمط Winforms "العادية" بسرعة وسهولة في WPF.

المفهوم بأكمله يفسح المجال لتصميم IMO أسهل.

لا أتفق مع بعض الإجابات هنا.WPF مناسب حقًا لـ خط ادارة الاعمال تطبيقات (LOB).(عميل LOB لتصميم الضفدع هو أفضل مثال).وإلى جانب كل الإمكانيات التي تجعل واجهة المستخدم الخاصة بك جذابة (وهو أمر غير ضروري في تطبيقات الأعمال)، فإن WPF يقدم لك الكثير.

تتفوق ميزات ربط البيانات والقوالب على Windows Forms.كما أنه يوفر طريقة أفضل بكثير لفصل التعليمات البرمجية والعرض التقديمي.لقد نجحنا في استخدام WPF لتطبيقين LOB في فرق لا تضم ​​أكثر من 2-3 مطورين.

ربما تكون المشكلة الأكبر التي ستواجهها هي منحنى التعلم الحاد لـ WPF (مقارنة بنماذج Windows) والذي سيقلل من سرعة التطوير مع المطورين غير المعتادين على WPF.

نقوم حاليًا بإعادة كتابة تطبيقنا في WPF من Windows Forms.نعم، هناك منحنى تعليمي حاد وعليك "إعادة تعلم" بعض الأشياء، لكن الأمر يستحق ذلك.وبدمجه مع WCF، نجد أننا نكتب تعليمات برمجية أقل وأسرع وأكثر قوة من أي وقت مضى.

التزم به لفترة من الوقت، اقرأ كتاب آدم ناثان, ، وتحقق من المكتبة المتنامية باستمرار لعناصر التحكم التابعة لجهات خارجية مثل تلك الموجودة في Telerik و مكون واحد.إحدى السلبيات، من وجهة نظري، هي أن أداة التصميم، مزيج التعبير, ، وهو أمر محرج للغاية للاستخدام.لا يزال الإصدار الأخير في مرحلة تجريبية، لكنه لا يبدو مناسبًا لأولئك منا الذين استخدموا Visual Studio لسنوات.نعم، إنه مخصص للمصممين بشكل أساسي، ولكن هناك بعض الأشياء التي لا يمكنك القيام بها في Visual Studio.

خذ بعين الاعتبار WPF إذا كان تصميم الواجهة مهمًا بالنسبة لك، لأن WPF يمكنه تقديم تجربة أفضل لواجهة المستخدم.لكن Windows Forms يتمتع بسنوات من التطور، لذا فقد أثبت نجاحه ويمكنك العثور على العديد من المبرمجين المتمرسين لهذا النظام الأساسي.

قد تكون إمكانية النقل أيضًا مشكلة، حيث يعمل WPF فقط مع نظام التشغيل Windows XP SP2 والإصدارات الأحدث.

كما أن لدى WPF منحنى تعليمي حاد، مما يعني أنه ليس من السهل تقديم منتج عالي الجودة دون الحصول على خبرة محددة في WPF.

حسنًا، إحدى الإجابات هي "عندما يتعين عليك دعم الإصدار 1.1 أو 2.0"، نظرًا لأن WPF جزء من .NET 3.0.هناك قيود معروفة لنظام التشغيل لـ WPF، وهناك مشكلة واضحة في المهارات:إذا كان لديك فريق من المطورين الذين يعرفون Winforms، فقد يكون من الأسهل إنتاج تعليمات برمجية قوية مع com.winforms.ومع ذلك، إذا كنت تكتب الكثير من أكواد واجهة المستخدم، فربما يكون من المفيد البدء في اختيار WPF في مرحلة ما.

يشترك WPF أيضًا في الكثير من القواسم المشتركة مع Silverlight، لذا فهو يتمتع بمزايا قابلة للتحويل.

يأتي WPF مع العديد من المزايا مثل ميزات ربط البيانات الرائعة وفصل المخاوف وفصل التصميم والمنطق وما إلى ذلك ...

بصفتي مطورًا ، أستمتع بالقدرة على تحديد واجهة المستخدم الخاصة بي باستخدام XAML بدلاً من ربطها بمصمم Forms Windows وأشعر أنني بحالة جيدة مع العلم أنه يمكنني الاعتماد على مصمم آخر لجعل تطبيقي يبدو جيدًا.

أنا شخصياً لا يهمني الإصدارات القديمة من Windows غير مدعومة ، لكن إحدى المشكلات الكبيرة في WPF هي أنه لا يتم دعمه (حاليًا/على الإطلاق) من قبل Mono (http://www.mono-project.com) لذلك لن تعمل تطبيقات WPF على نظام التشغيل Mac OS أو Linux.(على الرغم من أن تطبيقات Silverlight سوف).

إذا كان لديك الوقت والموارد للاستثمار في تعلم WPF، افعل ذلك!حتى لو كنت ستقوم بكتابة تطبيقات Silverlight لدعم أنظمة تشغيل متعددة.

إذا كنت بحاجة إلى تشغيل تطبيقات سطح المكتب على نظام تشغيل متعدد باستخدام SWF.

هناك العديد من الاختلافات.لقد أحببنا WPF من أجل:

  1. الأسلوب التصريحي للبرمجة.
  2. الرسوم المتحركة وانتقالات الحالة
  3. يعد Expression Blend أداة رائعة
  4. دعم أسلوب جيد.

ومع ذلك، فقد تمسكنا بـ Windows Forms للأسباب التالية:

  1. الوقت الإضافي الذي يستغرقه المطور لتعلم WPF عندما يعرفون بالفعل نماذج Windows.
  2. لن يتم تشغيل WPF على Windows 2000 أو أقل.

إن الاعتبار الأكبر عند تحديد الخيار الذي ستستخدمه هو مراعاة برنامج .NET Framework الذي قام جمهورك المستهدف بتثبيته.أجد أن عددًا أكبر من الأشخاص لديهم إصدارات .NET Framework الأقل التي تدعم Windows Forms فقط، ولكن هذه مجرد تجربتي الشخصية.

تتمثل مزايا WPF في أنه من الأسهل بكثير إنشاء واجهة مستخدم رسومية ذات مظهر جميل باستخدام عناصر تحكم ورسوم متحركة مخصصة.يساعد WPF أيضًا على فصل طبقات العرض التقديمي والمنطق.إذا كان لديك مصممين، فهذا يسمح لك بتخصيص 95% من هذا العمل لغير المبرمجين ويسمح للمبرمجين بالعمل على المنطق.تتمثل العيوب في تكاليف برنامج Expressions Blend، وعدم وجود أي من أدوات ملفات تعريف التعليمات البرمجية لـ Visual Studio تعمل بشكل جيد لأنها تميل إلى الوقوع في مكالمات إطار العمل في محاولة تقديم XAML.أنا متأكد من أن هناك آخرين ولكن هؤلاء كانوا الوحيدين الذين رأيناهم حقًا.

الاعتبار الرئيسي هو إذا كنت ترغب في مطالبة عملائك بتثبيت .NET 3.0 أو حتى .NET 3.5 SP1 الأفضل.سوف تحصل على بعض ردود الفعل السلبية

يسهل WPF تسليم أعمال تصميم النماذج إلى مصمم فعلي، وليس إلى مطور ملابس المصمم.إذا كان هذا هو الشيء الذي ترغب في القيام به، فإن WPF هو إجابتك.إذا كانت الأزرار ذات النمط الكلاسيكي لـ Windows جيدة، فمن المحتمل أن تكون Windows Forms هي الحل الأمثل.

(تزعم الإجابات المتعددة أنه يجب عليك استخدام WPF إذا كان تصميم الواجهة "مهمًا بالنسبة لك" ولكن هذا غامض جدًا.تصميم الواجهة دائمًا "مهم".)

إذا كان لديك ترخيص MSDN، تحقق من ذلك أدوات التعبير.لقد تم تصميمه خصيصًا لـ WPF، ويتم تصديره مباشرةً إلى Visual Studio وقد يساعد في تسهيل عملية النقل.

إذا كنت تهتم فقط بدعم Windows ولا تمانع في الوقت الذي يستغرقه تعلم ذلك، فانتقل إلى WPF.إنه سريع ومرن وسهل إعادة الجلد ويحتوي على أدوات رائعة للعمل معه.

كمكافأة جانبية، يعتمد Silverlight على WPF ويتيح لك البدء بأي منهما اكتساب المعرفة حول كيفية العمل مع الآخر.إذا استمرت الأمور في الاعتماد على الويب، فإن الحصول على معرفة مسبقة (ومكتبة من التعليمات البرمجية الموجودة) لنقلها بسهولة إلى المتصفح (أو Windows Live Mesh) قد يساعد في منح برنامجك فرصة إضافية للحياة.

إذا قررت استخدام WPF، مع الأخذ في الاعتبار الإيجابيات والسلبيات الموضحة بالفعل في الإجابات المذكورة أعلاه، فإنني أوصي بشدة بالاطلاع على هذا حلقة dnrTV مع بيلي هوليس

في دوت نت روكس الحلقة 315, يناقش بريان نويز هذا الأمر باستفاضة.

توجد مشكلة معروفة في عرض النص في WPF.أبلغ العديد من المستخدمين أن الاستخدام المكثف للصقل ومزج البكسل المستخدم يسبب نصًا ضبابيًا.يعد هذا بمثابة كسر كبير في بعض الظروف، وعلى حد علمي، فقد تم الاعتراف به من قبل Microsoft على مستوى ما.

على مدى السنوات الثلاث والنصف الماضية كنت أقوم بتطوير Windows Forms (في شركتين).تم استخدام كلا التطبيقين على نطاق واسع وانتهى الأمر بوجود مشكلات في GDI.سوف تنفد موارد GDI في النهاية من تطبيقات Windows Forms الكبيرة - مما يتسبب في اضطرار المستخدم النهائي إلى إعادة التشغيل.

يشكو سكوت من Expression Blend وكيف أن هذا لا معنى له كمطور.كان رد فعلي الأول على Expression Blend هكذا.ومع ذلك، أرى الآن أنها أداة لا تقدر بثمن، ولكنها تعتمد حقًا على نوع المطور الذي أنت عليه.

أنا مطور واجهة المستخدم الذي كان عليه تنفيذ متكامل الدور، وفي النهاية وجدت أن Expression Blend لا يقدر بثمن لإنشاء الأنماط والتحكم في القوالب بطريقة WYSIWYG.دائمًا ما أقوم بتشغيل Expression Blend وVisual Studio في نفس المشروع في نفس الوقت.

أعتقد أيضًا أن اللعب في Expression Blend وإلقاء نظرة على XAML يعد البصق طريقة ممتازة لتعلم WPF API ...يشبه إلى حد كبير استخدام المصمم في Windows Forms والتحقق من كود C# الذي ينشره مفيد في تعلم كيفية استخدام كل ما تقوم بتصميمه هناك.

مزيج التعبير مفيد.فقط قم بتجربته، خاصة إذا كنت تعمل على العناصر المرئية للتطبيق.

إقتباس من مشاركة سابقة من مارك:

  • في Windows Forms، يمكنك تصميم واجهة المستخدم الخاصة بك، ثم كتابة التعليمات البرمجية لتشغيل واجهة المستخدم تلك، والتي تتضمن أيضًا بشكل عام تعليمات برمجية لتشغيل كائنات البيانات الخاصة بك.
  • في WPF، أنت تستثمر في طبقة الأعمال التي تحرك كائنات البيانات الخاصة بك، ثم تصمم واجهة تستمع إلى كائنات البيانات الخاصة بك.

أود أن أزعم أن هذا يعد اختيارًا للتصميم، وليس ما إذا كنت تستخدم Windows Forms أو WPF أم لا.ومع ذلك، يمكنني أن أقدر أن بعض التقنيات قد تكون أكثر ملاءمة لنهج معين.

فقط إذا لم تكن لديك خبرة في WPF ولا ترغب في الاستثمار فيها :)

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top