سؤال

أعتقد أنني بدأت في حيرة مع وظيفة وحدة تحكم في MVC.

لدي خدمة تعرض خمسة وظائف:

  • قائمة الحزم في قائمة الانتظار
  • الحصول على حزمة
  • حذف الحزمة
  • قبول الحزمة
  • رفض حزمة

يعتمد جهاز التحكم ASP.NET MVC الخاص بي على هذه الخدمة، ويمكنه بشكل عام تنفيذ مكالمة خدمة حول إجراء. أنا سعيد حتى الآن.

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

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

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

يبدو أنني أريد أن أقوم بإثبات إنشاء إجراء لكل طلب، وليس وحدة تحكم، وأنا مجرد إساءة استخدام المرشحات للحصول على ذلك؟

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

المحلول

هل لديك عاييات مخصصة ونماذج Poco؟ إذا كان هذا هو الحال، فيمكنك التعامل مع البيانات من الخدمات داخل ViewModel. أنا سعيد جدا بهذا التقويم.

public class PackageViewModel()
{
    public PackageDetail{get;set;}
    public int PackageID{get;set;}
    public List<Package>Packages{get;set;}
    public string SomeFilterCriteria{get;set;}

    publlic void FillPackageList(IPackageService packageService)
    {       
        Packages = packageService.GetPackages(SomeFilterCriteria);      
    }
}

في تحكم:

public ViewResult ListPackages(PackageViewModel model)
{
    model.FillPackageList(PackageService);
    return View("ListPackages",model);

}

أنا لا أفهم ما تقصده "عرض البنائين النموذجيين".

نصائح أخرى

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

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