كيف يمكن قابلة لإعادة الاستخدام أن تكون فئات ViewModel؟

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

سؤال

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

  • يجب أن أكون قادرا على إعادة استخدام رأيي إذا كنت بحاجة إلى وظيفة مماثلة لتطبيق WinForms؟
  • لا يدعم Silverlight كل الأشياء التي لا يجب أن أكون قادرا على إعادة استخدامها لتطبيقات Silverlight؟
  • ماذا لو كنت أريد أن أجعل Gui Linux لطلبي. ثم أحتاج إلى ViewModel للبناء في أحادي - هل هذا شيء يجب أن أسعى إليه؟
  • وهلم جرا..

لذا؛ يجب كتابة فئات ViewModel واحدة مع نظرة واحدة محددة في الاعتبار، أو التفكير في إعادة الاستخدام؟

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

المحلول

للإجابة على سؤالك، فكر في مبدأ مسؤولية واحدة:

"يجب أن يكون للفئة واحدة، وسبب واحد فقط للتغيير".

أود أن أقول، في بعض الأحيان، لا ترغب عادة في إعادة استخدام ViewModel لوجهات نظر متعددة. السبب الرئيسي الذي سأجادل بهذا، هو أن ذلك من شأنه أن يمنح ViewModel الخاص بك أكثر من سبب واحد للتغيير. وبعبارة أخرى، فسيحتاج إلى تغيير ما إذا كان أحد التغييرات المشاهدة الأخرى أو التغييرات الأخرى، وفي رأيي، هذا سببين للتغيير. أين توقف؟ سأظل بسيطة في هذه الحالة، وربط Viewmodel واحد للعرض.

شيء آخر للتفكير فيه مع MVVM مع WPF هو قالب البيانات. من الأسهل بكثير إنجازه إذا قام كل ViewModel بتسليم عرضا واحدا فقط.

نصائح أخرى

فقط بشكل عام، وتطبيق yagni principl - ربما لن تحتاج إليها. ما لم تتمكن من رؤية هذه الأشياء التي يحتمل أن يحدث، سأستمر مع أبسط نهج للحصول على البرنامج الذي يعمل في المتطلبات التي لديك حاليا.

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

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

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

هذا سؤال قديم، لذلك أتردد في إضافة إجابة أخرى. ولكن كل الإجابات المنشورة حتى الآن فقدت النقطة. الجواب من MSDN واضح جدا: تهدف ViewModel إلى حد كبير من مشاركتها من خلال العديد من وجهات النظر عبر OSS المختلفة، كما هو موضح في هذا الرقم:

enter image description here

القيام بذلك لن يؤدي حتما إلى رمز زائدة.

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