سؤال

اعتقدت أنني سأقوم بنشر هنا على أمل أن يكون شخص ما لديه خبرة MVVM قادرا على تقديم آراء حول ما إذا كانت ما يلي فكرة جيدة:

أنا أستخدم إطار Sacha Barber's Cinch MVVM، والذي يتضمن فئة Marlon Grech SimpleCommand.

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

الآن، ما مدى تشغيله هو حالة استخدام حيث أستخدم أمرا لتبديل الاتصال بجهاز. هناك مجموعة من الطرق المختلفة التي يمكنني تنفيذها (لا يوجد دائما - إنه برنامج!). طريقة واحدة ستكون لفضح كائنات أمر متعددة من ViewModel - واحد ل "قطع الاتصال" و "الاتصال"؛ اجعل نموذج العرض يعرض خاصية يشير إلى حالة الاتصال (exconnected) والحصول على الرابط المشروط إما الأمر Connect أو Confonnnect. رد فعلي على هذا الخيار رغم ذلك، هل ... يوك!

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

بدء تشغيل هذا المسار هذا، يحدث لي أنه قد يكون هناك اختلافات أخرى في هذا النمط حيث يحتاج UI إلى تغييره وفقا لحالة القيادة. على سبيل المثال، بالإضافة إلى تغيير نص الأمر وفقا لحالة الاتصال، قد يكون لديك أماكن يحتاج فيها رمز إلى تغيير وفقا لحالة الاتصال. لذلك، بدأت في كتابة فئة "دعوة" تنفذ inotifypropertychanged، وتكييف خصائصين - "نص" و "الدولة". لقد قمت بإجراء Class Generic بحيث يمكن تعريف نوع الحالة من قبل المستخدم (عادة ما افضل عدم استخدام "كائن" حيث يمكن تجنبه).

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

لذلك، أنا أفكر في أنه على الأقل مع الأوامر الموجهة، لن تكون الدولة منطقية.

ومع ذلك، لا أتعامل مع الأوامر الموجهة - أنا تتعامل بشكل خاص بأوامر MVVM. في هذه الحالة، لا يوجد في الأساس أي توجيه شرطي للأوامر - يتم ربط المشاهدات MVVM مباشرة بأعمير أمر ViewModel معين وتنفيذ ومعالجات Canexecute.

في هذه الحالة، هل من المنطقي؟

لقد أرفقت نسخة من التعليمات البرمجية المعنية، في حالة استخدامها / الفائدة.

شكرا، فيل

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

المحلول

الأمر متروك لك حقا ما تعتقد أنه سيكون من الأسهل العمل معه.

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

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

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

على أي حال، هذا هو أفضل قليلا ... خذ بعيدا هو "تفعل كل ما يشعر بالراحة".

نصائح أخرى

مثل آخر ملصق قال، "كل ما يشعر بالراحة".

في حالتي، عادة ما أستخدم شيئا مثل تفويضكومنان. وبعد إذا كنت بحاجة إلى ربط بعض البيانات، فأرتبط ب VM. عند تنفيذ الأمر، يتم تنفيذها داخل VM الخاص بي (عبر المندوب المقدمة إلى تفويض واشوماند في Init). ثم يدير المندوب المنفذ / maynot بعض الكود القابل لإعادة الاستخدام لإرضاء الأمر.

يبدو أنك تريد استخدام الأمر لأنه VM الخاص. لم أفكر في القيام بذلك من قبل نفسي، ولكن إذا كان الأمر جيدا بالنسبة لك، ففعل ذلك! :)

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