سؤال

لدي مستودع (CustomerRepository) الذي يسترد البيانات من طبقة البيانات.معظم منطق الأعمال موجود في فئة الكيان (Customer) الذي يقبله المستودع أو يعيده.

ومع ذلك، أين تضع منطق أعمال الكيان العالمي (الذي ينطبق على جميع العملاء)؟

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

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

المحلول

وأنا أتفق مع روبرت مونتيانو.

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

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

وهناك تمييز الإضافية التي يمكن أن يتم وتخمين من اسمك الذي تستخدمه الصافية، وربما استخدام LINQ إلى SQL كما المخزون الخاص بك على النحو المبين في NerdDinner.

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

نصائح أخرى

وألفه وراء الخدمة.

ضعه في مستودع آخر (BusinessRuleRepository) واطلب من CustomerRepository استخدامه.

أو

إذا كان منطق الأعمال يحد فقط من النتائج التي يمكن للمستخدم رؤيتها، فقد ترغب في استخدام نمط الواجهة مع المصنع.في هذه الحالة، سيكون لديك ICustomerRepository الذي يتعامل مع CustomerRepository وLimitedCustomerRepository (الذي قد يشمل CustomerRepository)، وCustomerRepositoryFactory الذي يُرجع ICustomerRepository المناسب للمستخدم.

وأعتقد أن فصل هذه الأنواع من الوظائف في طبقة الخدمة هو الطريق للذهاب.

وأنا مؤخرا ببناء نظام للقيام التنبؤ معقدة مع العديد من الكيانات باستخدام البيانات التاريخية. وضع كل بت الوصول إلى البيانات في مستودع لكل كيان. منطق التنبؤ معقدة أنا أبقى في طبقة الخدمة ومرت كائنات المخزن في حسب الحاجة.

وكانت

وأضاف المكافأة التي كان لي وسيلة سهلة للكشف عن منطق التنبؤ لنظم خارجية ببساطة عن طريق خلق طبقة المعهد على شبكة الإنترنت.

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