سؤال

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

لذلك جوش لديه فئة تسمى ألكوستومرسفيوموديل ، ورمز شيء من هذا القبيل:

    public AllCustomersViewModel(CustomerRepository customerRepository)
    {
        if (customerRepository == null) throw new ArgumentNullException("customerRepository");

        // Populate the AllCustomers collection with CustomerViewModels.
         _allCustomers = _customerRepository
            .GetCustomers()
            .Select(cust => new CustomerViewModel(cust, _customerRepository))
            .ToList();
   }

كيف تحل الموقف الذي تريد فيه العملاء المفضلين, العملاء, العملاء المحليين, إلخ, إلخ??

يقترح رمزه لي فئة فيوموديل لكل منها ، مع تصفية المستودع الثابت ترميز في تلك الفئة.

وإلا وسيلة لتمرير مرشح اختياري في فيوموديل جنبا إلى جنب مع مستودع?

كيف يحل الكود الخاص بك هذه المشكلة بالذات?

جانبا, هل لدى أي شخص روابط أو أمثلة جيدة توضح كيفية استخدام نمط سبيسيافيكاتيونباتيرن أو إيكريابل لحل مشكلات مثل هذه?

في صحتك,
بيريل

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

المحلول

خيار واحد (وربما أنظف) هو ببساطة إضافة تلك الأساليب إلى CustomerRepository - على سبيل المثال. GetPreferredCustomers(), GetLocalCustomers() الخ.

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

الخيار الآخر ، كما ذكرت، هو أن يعرض المستودع الخاص بك IQueryable<T>.إذا كنت سعيدا أن تكون مرتبطة في إكيريابل ، ونحن واثقون من أن أي تنفيذ الوصول إلى البيانات سوف تدعم مزود لينق ، ثم أن يوفر مرونة جيدة.انظر هنا لمزيد من المعلومات.

شخصيا ، أنا أفضل الخيار الأول ، وخاصة بالنسبة للتطبيقات على نطاق أوسع.

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