سؤال

لدي بعض المشاكل في تصميم الجذر الكلي.هكذا أرى الأمر في ذهني :)

Store (the aggregate root)
-> Sales - A store create a sale every day
 -> Zones - A store is divided into zones
    -> Styles - A zone has x number of styles
       --> Colors - A style has x number of colors
    etc..

الآن بناءً على هذا، سيكون الجذر الإجمالي هو المتجر.ومع ذلك، إذا أردت الآن إنشاء مستودع حول ذلك، فهل سيبدو مثل هذا؟

public class StoreRepository()
{
  Store GetById() {...}
  StoreZone GetZone() {...}
  List<StoreZoneStyle> GetStylesByZone() {...}
  List<Color> GetColorsByStyle() {...}
}

هل هذه طريقة جيدة للاستمرار؟وغني عن القول أنني جديد على DDD.

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

المحلول

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

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

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

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

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

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

نصائح أخرى

الجذور الإجمالية هي حدود الاتساق للمعاملات والتوزيعات والتزامن (إريك إيفانز عبر gojko adzic).

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

It seems that "Store" isn't aggregate root because you don't want to hide all functionality for "Zones", "Sales" etc behind "Store" object. That way "Store" object might be very bloated.

"Store", "Zone" and "Sale" could have it's own repository.

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