قبل ما تكتب كود… افهم البزنس

أحمد رمضان

. 2 د قراءة

كتاب Advanced web applications Architecture 

عنوان الفصل ده اسمه: The Domain Model



وقبل ما نغوص في أي كود، لازم نوقف لحظة ونسأل نفسنا شوية أسئلة مهمين جدًا:


يعني إيه Domain؟
يعني إيه Model؟
ويعني إيه أصلًا أفهم البزنس قبل ما أكتب كود؟


--------------------------------------------------------------------------------

أولًا: يعني إيه Domain؟

ببساطة شديدة،

الـ Domain هو المجال اللي التطبيق شغال فيه.

يعني لو عندي تطبيق لمحل كتب، يبقى الدومين بتاعي هو:

1 -مستخدم                         "وظيفته يطلب كتب"

2 -كتاب                              "المستخدم هيشتريه"3 - طلب (Order)             "المستخدم بيسجّل فيه بياناته سواء كانت (كمية او سعر )"

دي كلها مش تفاصيل تقنية، دي عناصر القصة نفسها.


من الاخر الدومين هو حكاية البزنس
مش الداتابيز
مش الفريمورك
مش الـ SQL

--------------------------------------------------------------------------------

طيب يعني إيه Model؟

الـ Model هو تمثيل منطقي ومنظّم لحكاية البزنس دي.

يعني:

الكتاب له خصائص:                        (عدد صفحات – سعر – عنوان)
المستخدم له خصائص:                  (اسم – إيميل)
الطلب (Order) له خصائص:       (المستخدم اللي بيشتري – الكتب – الكمية – السعر النهائي … إلخ)

إنت هنا: بتقسّم الواقع لكائنات مفهومة.


ما بتخترعش حاجة ولا بتفكر في Tables ولا أعمدة

--------------------------------------------------------------------------------

كده وصلنا لإيه؟

لما تجمع : "Domain (القصة)" + "Model (التمثيل)" = Domain Model

يعني:

مجموعة Objects بتتكلم بلغة البزنس مش بلغة الداتابيز
وده فرق جوهري.
Object مش معناه Row
 Model مش معناه Table

--------------------------------------------------------------------------------

طب الفصل ده جاي يعمل إيه بقى؟

الفصل ده بيقولك بصراحة:


---- أنا مش مهتم أعرف الداتا بتتخزن إزاي
---- أنا مهتم أعرف الدومين بيفكّر إزاي


وعلشان كده، الهدف الأساسي هو:


نطلع من الكنترولر كل: SQL و Tables و تفاصيل تخزين
ونبدأ نتعامل مع:
Entity  و Repository و Domain Rules
يعني:
بدل ما الكنترولر يبقى مليان تفاصيل تقنية، يبقى بيحكي قصة البزنس.


مثال سريع على Domain Rules (علشان تكون الصورة واضحة)


مينفعش Order يتعمل من غير Email
مينفعش Quantity تكون صفر
السعر النهائي = السعر × الكمية (مش رقم عشوائي)
دي قوانين بزنس
مش قوانين داتابيز
ومكانها الطبيعي جوه الـ Domain Model.

--------------------------------------------------------------------------------

أهداف الفصل بشكل واضح


1 -  نطلع Entity (زي Order) من وسط الكود المتلخبط
2 -  نعمل Repository مسؤول عن حفظ الداتا بدل ما نكتب SQL جوه Controller
3 -  نخلي الـ Entity: مش شايفة Database و مش عارفة Tables و مش فارق معاها SQL و كل ده مسؤولية الـ Repository
4 - نفهم يعني إيه هوية الـ Order وهل الهوية دي جاية من الداتابيز؟ ولا من الدومين نفسه؟


وبكده نكون خلّصنا المقدمة.

المرة الجاية بقى هنخش على أول مثال فعلي في الفصل ونمسك الكود القديم ونشوف خطوة خطوة:


هو وحش ليه؟


وإزاي نبدأ نطلّع منه Domain Model حقيقي

روح هنا علشان نبدأ نعمله سوا👈من هنا