سؤال

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

في سياق نمط المستودع ، ما هو الجذر الكلي؟

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

المحلول

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

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

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

نصائح أخرى

من إيفانز DDD:

الإجمالي هو مجموعة من الكائنات المرتبطة التي نتعامل معها كوحدة لغرض تغييرات البيانات. كل إجمالي لديه جذر وحدود. تحدد الحدود ما هو داخل الإجمالي. الجذر هو كيان واحد محدد موجود في المجاميع.

و:

الجذر هو العضو الوحيد في المجموع الذي يُسمح للكائنات الخارجية بالاحتفاظ بمراجع إلى [.

هذا يعني أن الجذور الإجمالية هي الكائنات الوحيدة التي يمكن تحميلها من مستودع.

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

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


فكرة عامة

مخطط فئة مصمم بشكل جيد يغلف الأجزاء الداخلية. النقطة التي تسمى من خلالها وصول هذا الهيكل aggregate root.

enter image description here

قد يكون الداخلية من الحل الخاص بك معقدة للغاية ، لكن مستخدم هذا التسلسل الهرمي سيستخدم فقط root.doSomethingWhichHasBusinessMeaning().


مثال

تحقق من هذا التسلسل الهرمي للفئة البسيطةenter image description here

كيف تريد ركوب سيارتك؟ اختار أفضل واجهة برمجة التطبيقات

الخيار A (إنه يعمل بطريقة ما):

car.ride();

الخيار ب (لدى المستخدم الوصول إلى فئة inernals):

if(car.getTires().getUsageLevel()< Car.ACCEPTABLE_TIRE_USAGE)
    for (Wheel w: car:getWheels()){
        w.spin();
    }
}

إذا كنت تعتقد أن هذا الخيار A هو أفضل ثم تهانينا. تحصل على السبب الرئيسي وراء aggregate root.


يجسد الجذر التجميعي فئات متعددة. يمكنك معالجة التسلسل الهرمي بأكمله فقط من خلال الكائن الرئيسي.

تخيل أن لديك كيانًا كمبيوترًا ، لا يمكن لهذا الكيان أيضًا العيش بدون كيان البرمجيات وكيان الأجهزة. هذه تشكل Computer التجميع ، النظام المصغرة لجزء الكمبيوتر من المجال.

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

النظر في إجمالي الجذر كنقطة دخول إلى إجمالي.

في رمز C#:

public class Computer : IEntity, IAggregateRoot
{
    public Hardware Hardware { get; set; }
    public Software Software { get; set; }
}

public class Hardware : IEntity { }
public class Software : IValueObject { }

public class Repository<T> : IRepository<T> where T : IAggregateRoot {}

ضع في اعتبارك أن الأجهزة من المحتمل أن تكون ValueBject أيضًا (ليس لديك هوية من تلقاء نفسها) ، اعتبرها مثالًا فقط.

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

المثال الأكثر شيوعا كونه شخص. كل شخص لديه العديد من العناوين ، أو أكثر أو أكثر من قسائم الدفع ، والفواتير ، وإدخالات CRM ، وما إلى ذلك. ليس الأمر كذلك دائمًا ، ولكن 9/10 مرات.

نحن نعمل حاليًا على منصة للتجارة الإلكترونية ، ولدينا في الأساس جذوران إجماليان:

  1. عملاء
  2. البائعون

العملاء يوفرون معلومات الاتصال ، نقوم بتعيين معاملات لهم ، والمعاملات تحصل على عناصر الخط ، إلخ.

البائعون يبيعون المنتجات ، والاتصال بالأشخاص ، عن صفحات الولايات المتحدة ، العروض الخاصة ، إلخ.

يتم الاعتناء بها من قبل مستودع العميل والبائع على التوالي.

من رابط معطل:

داخل إجمالي هناك جذر إجمالي. الجذر الإجمالي هو الكيان الأصل لجميع الكيانات الأخرى وكائنات القيمة داخل المجموع.

يعمل مستودع على جذر إجمالي.

يمكن أيضًا العثور على مزيد من المعلومات هنا.

دينة:

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

enter image description here

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

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

في إرلانج ، ليست هناك حاجة للتمييز بين المجاميع ، بمجرد أن يتكون الركام بواسطة هياكل البيانات داخل الحالة ، بدلاً من تكوين OO. انظر مثال: https://github.com/bryanhunter/cqrs-with-erlang/tree/ndc-london

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