لو قارنا بيت منزل عادي و بين عمارة , وحدة البناء في كليهما هي "الطوب" او ال"البلك" و اللي ممكن عدها , العمارة طبعاً اكثر عدداً و هذي الكثرة انتجت لنا مميزات اكثر متمثلة بكثرة الغرف و المرافق و الوحدات كالشقق.
في الأنظمة البرمجية وحدة البناء هي اسطر الكود , فهل ياترى عدد الأسطر في انظمتنا يتناسب طردياً مع عدد المميزات التي يقدمها النظام؟ إذا كانت الاجابة لا فهناك مشكلة. مشكلة تتمثل بكلمة "تعقيد" Complexity. اسطر برمجية لا داعي لها.
كتاب @ericevans0 الأزرق Domain Driven Design يشرح هدفه في عنوانه الفرعي : Tackling Complexity in the Heart of Software. حل او نزع التعقيد في قلب البرامج.
كلمة قلب مهمة هنا .. فنحن نتكلم عن لُب البرنامج ... حيث الEntities في الClean Architecture كما في الصورة.
كلمة قلب مهمة هنا .. فنحن نتكلم عن لُب البرنامج ... حيث الEntities في الClean Architecture كما في الصورة.
الاسبوع الماضي تكلمت عن الValue Objects و انها اشياء تعكس شيء في الواقع ليس له هوية. مثل الريال او الجنيه او الدرهم .. لو اعطيت شخصاً 5 ريالات ثم طلبت استرجاعها , فهل ستشترط أن يرجع لك نفس الورقة النقدية بالرقم التسلسلي ام أي 5 ريالات ؟!!. نحن نتعامل هنا بالValue و ليس بالهوية.
على عكس الValue Object الEntity هو Object بهوية ( Id ) كجهاز هاتفك , سيارتك , صديقك , اخوك. كما قال دنقل : "أقلب الغريب كقلب أخيك؟!". التفريق بين الاثنين يعتمد على اهمية تتبع و تحديد الObject بذاته بالنسبة للBusiness.
هناك قاعدة لكن استخدمها بحذر للتفريق بين الEntities و الValue Object و هي ان الEntities تحتاج دائماً Row بـID في قاعدة البيانات اما الValue Object فتكون في نفس Row الخاص بالـ Entity. اي قد تضيف حقلين لعنوان التوصيل في سطر الفاتورة مباشرة.
وضعت امام الShopping Cart علامة استفهام. لانه من الممكن ان تكون ValueObject إذا لم نكن مهتمين بحفظها في قاعدة البيانات كـCart و انما مهتمين بحفظها بعد أن تصبح Order فقط. لكن من الأفضل معاملتها ليس فقط كـEntity و انما كـ Aggregate Root.
الAggregates ليست Class كالValueObject او الEntity هي فقط Pattern فكرتها ان تتعامل مع عدة Objects كوحدة واحدة ( عنقود عنب) لكن الAggregate Root هو Class و أهم كلاس حيث انهو مدير باقي الِAggregates سواء كانت Entities او ValueObjects او اشياء اخرى.
هنا يأتي دور الDomain Events. و التي من مهامها التخاطب بين الAggregate Roots. و ستكون له سلسلة مستقلة.
هذا و دمتم.
هذا و دمتم.
جاري تحميل الاقتراحات...