سؤال

دريك ويتاكر نشر المادة بضعة أيام قبل أن تصل النقطة التي كنت غريبة عن لبعض الوقت: يجب أن منطق الأعمال موجودة في تحكم ؟

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

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

المحلول

منطق الأعمال ينبغي أن يكون حقا في النموذج.يجب أن تهدف الدهون نماذج نحيف وحدات تحكم.

على سبيل المثال, بدلا من الاضطرار:

public interface IOrderService{
    int CalculateTotal(Order order);
}

وأود أن يكون بدلا من:

public class Order{
    int CalculateTotal(ITaxService service){...}        
}

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

وهذا من شأنه أن يجعل جهاز تحكم تبدو شيئا مثل:

public class OrdersController{
    public OrdersController(ITaxService taxService, IOrdersRepository ordersRepository){...}

    public void Show(int id){
        ViewData["OrderTotal"] = ordersRepository.LoadOrder(id).CalculateTotal(taxService);
    }
}

أو شيء من هذا القبيل.

نصائح أخرى

أنا أحب الرسم البياني الذي قدمه مايكروسوفت أنماط & الممارسات.وأعتقد أن في القول المأثور 'صورة تساوي ألف كلمة'.

Diagram shows architecture of MVC and business sevices layers

هذا هو سؤال رائع.

أعتقد أنه من المثير للاهتمام أن عددا كبيرا من نموذج MVC التطبيقات تفشل في الواقع إلى اتباع نموذج MVC بمعنى حقا وضع "منطق الأعمال" تماما في النموذج.مارتن فاولر قد أشار إلى أن MVC هو نمط بمعنى عصابة الأربعة.بل هي النموذج الذي يجب على مبرمج إضافة أنماط إلى إذا هي خلق شيء أبعد من لعبة التطبيق.

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

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

يمكنك التحقق من هذا رهيبة البرنامج التعليمي من قبل ستيفن الثر الذي يظهر التحقق من صحة مع طبقة الخدمة.

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

منطق الأعمال يجب أن لا تكون موجودة في وحدات تحكم.وحدات التحكم يجب أن تكون نحيف ممكن ، من الناحية المثالية اتبع طقطق:

  1. تجد المجال الكيان
  2. العمل في المجال الكيان
  3. إعداد بيانات عرض / عودة النتائج

بالإضافة إلى وحدات تحكم يمكن أن تحتوي على بعض منطق التطبيق.

لذا أين أضع أعمالي المنطق ؟ في نموذج.

ما هو النموذج ؟ الآن هذا سؤال جيد.يرجى الاطلاع مايكروسوفت أنماط وممارسات المادة (مجد AlejandroR ممتازة العثور على).هنا وهناك ثلاث فئات من النماذج:

  • نموذج عرض:هذا هو مجرد بيانات حقيبة, مع الحد الأدنى, إذا كان أي منطق في تمرير البيانات من و إلى إطلالات على التحقق من صحة الحقل.
  • نموذج المجال:نموذج الدهون مع منطق الأعمال ، وتعمل على واحد أو عدة بيانات الكيانات (أيكيان في دولة معينة من العمل على كيان ب)
  • نموذج البيانات:التخزين-علم نموذج المنطق الواردة في كيان واحد لا يتعلق إلا أن هذا الكيان (أيإذا كان الحقل ثم الميدانية ب)

بالطبع, MVC هو النموذج الذي يأتي في أصناف مختلفة.ما أصف هنا هو MVC الاحتلال الطبقة العليا فقط ، vide هذه المقالة على ويكيبيديا

اليوم, MVC و نموذج مماثل-الرأي-مقدم (MVP) هي الفصل بين المخاوف أنماط التصميم التي تنطبق حصرا على طبقة العرض من نظام أكبر.في سيناريوهات بسيطة MVC قد تمثل الأولية تصميم نظام الوصول مباشرة إلى قاعدة البيانات ؛ ومع ذلك ، في معظم السيناريوهات تحكم في نموذج MVC يكون فضفاض الاعتماد على أي خدمة أو طبقة البيانات/الطبقة.هذا هو كل شيء عن العميل-الخادم

إذا ش استخدام التبعية عن طريق الحقن منطق تسلسل العمل الخاص بك سوف تذهب لهم وبالتالي سوف تحصل على مرتبة ونظيفة وحدات تحكم.

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