سؤال

"البحث" في هذا المثال هو IList<string> اختصارات الدولة. بشكل عام ، لن يتضمن نموذج النطاق الخاص بك هذه الخيارات. عادةً ما تأخذ ViewModels هذه المسؤولية التي تشير إلى كل من نموذج المجال الأصلي وكذلك كائن البحث ، ولكن ماذا يحدث عندما تكون نماذج المجال متداخلة وأنت تستخدم قوالب MVC (والتي لن تتمكن من الوصول إلى خصائص جذر النموذج الأصلي؟

هل هناك طريقة لتضمين عمليات البحث في كائن واحد والنموذج في كائن مختلف للقالب؟ هل يجوز تجميع نموذج ViewModel على هذا القالب في العرض (الذي سيتعين عليه تضمين أي بيانات متداخلة من هناك)؟ أعتقد أن الأساليب الثابتة لسحب قيم البحث أمر سيء.

أيه أفكار؟

ملاحظات (على حد علمي):

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

ومع ذلك ، عندما يكون لديك نموذج مجال متداخل (جذر إجمالي) ، فإن الكائنات المتداخلة ليس لها مكان وضع قوائم البحث ، ولا يمكن لقوالب MVC الوصول إلى نموذج عرض مستوى الجذر (نموذج العرض الخاص بهم هو النموذج الجزئي).

يحرر:

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

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

المحلول

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

نصائح أخرى

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

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