سؤال

سؤال سريع:سيكون من الجيد أو فكرة سيئة لتنفيذ بلدي المجال يحركها التصميم أسلوب مستودعات ووحدانية?لماذا ؟

أو ممكن استخدام تبعية حاقن الحاويات إلى إدارة المستودعات و تقرر إذا كانت ووحدانية أو لا ؟

أنا لا تزال القراءة DDD بسرعة, و أود أن أرى بعض مستودع الأمثلة.

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

المحلول

ولقد رأيت عدة طرق للقيام بذلك.

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

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

ولقد رأيت بعض الأمثلة حيث مستودعات أبدا الحصول على استدعاء. عندما يتنقل شخص الرسم البياني الكائن في نموذج ويطلب كائن يكون لا تحميل نموذج يثير مجرد حدث ومستودع يتفاعل مع هذا الحدث. بهذه الطريقة لا توجد المكالمات إلى مستودع وانها تنفصل تماما عن النموذج. I havn't تستخدم هذه العمارة نفسي ولكن يبدو نظيفا جدا.

نصائح أخرى

استخدم بك التبعية الحاويات حقن أن تقرر كيف وأين يتم إنشاء مستودعات.

وباستخدام

UserRepository.Instance.Find(userId);

وكنت تقوم بإنشاء حاجز الاختبار.

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

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

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

بقدر ما أفهم المجال يحتوي فقط على مستودع واجهات, مما يعني يمكن أن يكون هناك العديد من مستودع تطبيقات واجهة واحدة.لذا مستودع بالتأكيد لا يمكن أن تكون فئة ثابتة ، حيث يمكنك تحديد أساليب ثابتة في واجهة.(ملاحظة:في بعض اللغات يمكنك تحديد أساليب ثابتة في واجهة, ولكن ذلك لا معنى كبير بالنسبة لي.)

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

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

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