سؤال

دعنا نقول أنني حصلت على كيانات 2 - فو وبار. Foo هو جذر إجمالي وتحتوي على شريط. بقدر ما أفهم، يجب أن تبدو مثل هذا:

public class Foo{
    private readonly Bar Bar;
}

أريد تقديم وظيفة للمستخدمين لاختيار أشرطة لمعنو FOOS من قائمة محددة (وتغييره).

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

هذا يؤدي إلى مشكلة - لا يمكن إنشاء شريط / تحديث بشكل مستقل دون الرجوع إلى FOO.

هل هذا يعني أن الشريط من المفترض أن يكون لديه مستودع على الرغم من أنه ليس له معنى بدون فو؟

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

المحلول

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

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

حسنا، هذه هي الطريقة التي أرى فيها DDD هنا، لكنني لست إريك إيفانز، بالطبع.

نصائح أخرى

أسباب وجود جذور التجميع هي:

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

بلدي تأخذ:إذا كنت بحاجة إلى الاختيار Bar كائنات بدون أ Foo, ، إستخدم BarRepository.

ولكن...ماذا لو قمت بتحديث Bar, ، وهو يكسر قاعدة التحقق من الصحة لوالد Fooب إذا كان هذا قد يحدث، فيجب عليك الوصول Bar عبر الوالد Foo.

ومع ذلك، إذا كنت بحاجة إلى الوصول إلى مجموعة من Bar الكائنات (على سبيل المثال للحصول على وظيفة دفعة أو تقرير)، وأنت أعرف الذي - التي Foos لن يتم كسره، والمضي قدما والوصول إليها عبر BarRepository.

تذكر أن الجذور الإجمالية يمكن أن تتكون من جذور إجمالية أخرى. قد تكتشف ذلك Bar هو جذر إجمالي نفسه، مما يمنحك مبرر ل BarRepository :)

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

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