التصميم الموجه بالمجال

التصميم الموجه بالمجال ( DDD ) هو منهج لتصميم البرمجيات [ 1 ] يركز على نمذجة البرمجيات لتتوافق مع مجال معين بناءً على مدخلات من خبراء ذلك المجال. [ 2 ] يعارض DDD فكرة وجود نموذج موحد واحد؛ بل يقسم النظام الكبير إلى سياقات محددة، لكل منها نموذجها الخاص. [ 3 ] [ 4 ]

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

يعتمد تصميم البرمجيات الموجه بالمجال على الأهداف التالية:

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

يرى منتقدو تصميم البرمجيات الموجه بالمجال أن المطورين عادةً ما يضطرون إلى تطبيق قدر كبير من العزل والتغليف للحفاظ على النموذج كبنية نقية ومفيدة. ورغم أن تصميم البرمجيات الموجه بالمجال يوفر مزايا مثل سهولة الصيانة، إلا أن مايكروسوفت توصي به فقط للمجالات المعقدة حيث يقدم النموذج فوائد واضحة في صياغة فهم مشترك للمجال. [ 5 ]

وقد صاغ هذا المصطلح إريك إيفانز في كتابه الذي يحمل نفس الاسم والذي نُشر عام 2003. [ 3 ]

ملخص

يُعبّر تصميم المجال عن عدد من المفاهيم والممارسات عالية المستوى. [ 3 ]

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

تهدف هذه الجوانب من تصميم المجال الموجه إلى تعزيز لغة مشتركة بين خبراء المجال والمستخدمين والمطورين - اللغة الشاملة . تُستخدم اللغة الشاملة في نموذج المجال ولوصف متطلبات النظام.

تُعد اللغة المنتشرة إحدى ركائز تصميم المجال الموجه (DDD) إلى جانب التصميم الاستراتيجي والتصميم التكتيكي .

في التصميم الموجه بالمجال، تعد طبقة المجال إحدى الطبقات الشائعة في بنية متعددة الطبقات موجهة للكائنات .

أنواع النماذج

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

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

العمل مع النماذج

في تصميم المجال الموجه، غالباً ما يتم فصل إنشاء الكائن عن الكائن نفسه.

على سبيل المثال، يُعدّ المستودع كائنًا يحتوي على دوال لاسترجاع كائنات المجال من مخزن بيانات (مثل قاعدة بيانات). وبالمثل، يُعدّ المصنع كائنًا يحتوي على دوال لإنشاء كائنات المجال مباشرةً.

عندما لا ينتمي جزء من وظائف البرنامج من الناحية المفاهيمية إلى أي كائن، فإنه عادة ما يتم التعبير عنه كخدمة .

أنواع الأحداث

توجد أنواع مختلفة من الأحداث في تصميم المجال الموجه (DDD)، وقد تختلف الآراء حول تصنيفها. ووفقًا ليان كوي، هناك فئتان رئيسيتان من الأحداث: [ 6 ]

أحداث النطاق

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

فعاليات التكامل

من جهة أخرى، تُستخدم أحداث التكامل لنقل التغييرات عبر سياقات محددة مختلفة. وهي بالغة الأهمية لضمان اتساق البيانات في جميع أنحاء النظام. عادةً ما تتضمن أحداث التكامل حمولات بيانات أكثر تعقيدًا مع سمات إضافية ، نظرًا لاختلاف احتياجات المستمعين المحتملين اختلافًا كبيرًا. يؤدي هذا غالبًا إلى اتباع نهج أكثر شمولًا في التواصل، مما ينتج عنه تواصل زائد لضمان مشاركة جميع المعلومات ذات الصلة بفعالية. [ 6 ]

أنماط رسم الخرائط السياقية

تُحدد عملية رسم خرائط السياق حدود المجالات أو المجالات الفرعية المختلفة داخل نظام أكبر، وتُساعد على تصور كيفية تفاعل هذه السياقات وارتباطها ببعضها البعض. فيما يلي بعض الأنماط، وفقًا لإريك إيفانز: [ 7 ]

  • الشراكة: "إقامة شراكة بين الفرق المسؤولة عن السياقين. وضع آلية للتخطيط المنسق للتطوير والإدارة المشتركة للتكامل" ، حيث "سينجح أو يفشل الفريقان في السياقين معًا".
  • النواة المشتركة: "حدد بحدود واضحة مجموعة فرعية من نموذج المجال التي تتفق الفرق على مشاركتها. حافظ على صغر حجم هذه النواة."
  • تطوير علاقات العملاء/الموردين: "إقامة علاقة واضحة بين العميل/المورد بين الفريقين" ، عندما "يكون الفريقان في علاقة بين المنبع والمصب".
  • المتوافق: "التخلص من تعقيد الترجمة [...] اختيار التوافق يبسط التكامل بشكل كبير" ، عندما يكون من غير المرجح حدوث واجهة مخصصة لنظام فرعي لاحق.
  • طبقة مكافحة الفساد: "إنشاء طبقة عازلة لتزويد نظامك بوظائف النظام الأساسي وفقًا لنموذج المجال الخاص بك"
  • خدمة الاستضافة المفتوحة: "بروتوكول يتيح الوصول إلى نظامك الفرعي كمجموعة من الخدمات" ، في حال كان من الضروري دمج نظام فرعي واحد مع العديد من الأنظمة الفرعية الأخرى، مما يجعل الترجمات المخصصة بين الأنظمة الفرعية غير ممكنة.
  • اللغة المنشورة: "لغة مشتركة موثقة جيدًا يمكنها التعبير عن معلومات المجال الضرورية كوسيلة اتصال مشتركة" ، على سبيل المثال معايير تبادل البيانات في مختلف الصناعات
  • طرق منفصلة: "سياق محدد [بدون] أي اتصال بالآخرين على الإطلاق، مما يسمح للمطورين بإيجاد حلول بسيطة ومتخصصة ضمن هذا النطاق الصغير"
  • كرة طينية كبيرة: [ 8 ] "حدود تحيط بالفوضى بأكملها" عندما لا توجد حدود حقيقية يمكن العثور عليها عند مسح نظام قائم

العلاقة بالأفكار الأخرى

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

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

وبالمثل، ينص نمط الكائنات المجردة على أن واجهة المستخدم يمكن أن تكون ببساطة انعكاسًا لنموذج مجال جيد بما فيه الكفاية. إن اشتراط أن تكون واجهة المستخدم انعكاسًا مباشرًا لنموذج المجال سيجبر على تصميم نموذج مجال أفضل. [ 9 ]

لقد أثر تصميم البرمجيات الموجه بالمجال على مناهج أخرى لتطوير البرمجيات.

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

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

الهندسة المعمارية القائمة على النماذج

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

مع ذلك، فإن التقنيات التي توفرها هندسة البرمجيات الموجهة بالنماذج (لنمذجة المجالات، وإنشاء لغات خاصة بالمجال لتسهيل التواصل بين خبراء المجال والمطورين،...) تُسهّل تصميم البرمجيات الموجه بالمجال عمليًا، وتساعد الممارسين على تحقيق أقصى استفادة من نماذجهم. وبفضل تقنيات تحويل النماذج وتوليد الشفرة في هندسة البرمجيات الموجهة بالنماذج، يُمكن استخدام نموذج المجال لإنشاء نظام البرمجيات الفعلي الذي سيديره. [ 11 ]

فصل مسؤوليات أوامر الاستعلام

يُعدّ فصل مسؤوليات الأوامر والاستعلامات (CQRS) نمطًا معماريًا لفصل قراءة البيانات (الاستعلام) عن كتابة البيانات (الأمر). ويشتقّ CQRS من فصل الأوامر والاستعلامات (CQS)، الذي صاغه برتراند ماير .

تُغيّر الأوامر الحالة، وهي تُعادل تقريبًا استدعاء الدوال على الجذور التجميعية أو الكيانات. أما الاستعلامات فتقرأ الحالة فقط دون تغييرها.

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

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

العصف الذهني للأحداث

يُعدّ "عصف الأحداث" أسلوبًا تعاونيًا للنمذجة قائمًا على ورش العمل، ويمكن استخدامه كخطوة تمهيدية في سياق تصميم المجال الموجه (DDD) لتحديد أحداث المجال وفهمها. تتضمن عملية الاكتشاف التفاعلية هذه تعاون أصحاب المصلحة وخبراء المجال والمطورين لتصوّر تدفق أحداث المجال وأسبابها وآثارها، مما يعزز فهمًا مشتركًا للمجال. غالبًا ما يستخدم هذا الأسلوب ملاحظات لاصقة مُرمّزة بالألوان لتمثيل العناصر المختلفة، مثل أحداث المجال والتجميعات والأنظمة الخارجية، مما يُسهّل استكشاف المجال بشكل واضح ومنظم. يُمكن أن يُساعد "عصف الأحداث" في اكتشاف المجالات الفرعية والسياقات المحددة وحدود التجميعات، وهي عناصر أساسية في تصميم المجال الموجه. من خلال التركيز على "ما يحدث" في المجال، يُمكن لهذا الأسلوب أن يُساعد في الكشف عن عمليات الأعمال والتبعيات والتفاعلات، مما يُوفر أساسًا لتطبيق مبادئ تصميم المجال الموجه ومواءمة تصميم النظام مع أهداف العمل. [ 12 ] [ 13 ]

توفير مصادر الفعاليات

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

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

يُمكن لنمذجة الجذور التجميعية لإخراج الأحداث عزل الحالة الداخلية بشكل أكبر مما هو عليه عند إسقاط بيانات القراءة من الكيانات، كما هو الحال في بنى تمرير البيانات القياسية متعددة الطبقات. ومن أهم المزايا سهولة تطبيق أدوات إثبات النظريات البديهية (مثل عقود مايكروسوفت و CHESS [ 14 ] )، حيث يُخفي الجذر التجميعي حالته الداخلية بشكل كامل. غالبًا ما تُحفظ الأحداث بناءً على إصدار مثيل الجذر التجميعي، مما يُنتج نموذج مجال يتزامن في الأنظمة الموزعة من خلال التزامن التفاؤلي .

ربط السياقات المحدودة بالخدمات المصغرة

يُعرّف السياق المحدود، وهو مفهوم أساسي في تصميم المجال الموجه (DDD)، منطقةً محددةً يكون فيها نموذج المجال متسقًا وصحيحًا، مما يضمن الوضوح وفصل الاهتمامات. [ 15 ] في بنية الخدمات المصغرة ، غالبًا ما يُربط السياق المحدود بخدمة مصغرة، ولكن هذه العلاقة قد تختلف باختلاف منهجية التصميم. تُعدّ العلاقة من نوع واحد إلى واحد، حيث يُنفّذ كل سياق محدود كخدمة مصغرة واحدة، مثاليةً عادةً لأنها تحافظ على حدود واضحة، وتقلل من الترابط، وتُمكّن من النشر والتوسع بشكل مستقل. مع ذلك، قد تكون هناك روابط أخرى مناسبة أيضًا: قد تنشأ علاقة من نوع واحد إلى متعدد عندما يُقسّم السياق المحدود إلى خدمات مصغرة متعددة لتلبية احتياجات التوسع المختلفة أو الاحتياجات التشغيلية الأخرى، بينما قد تُدمج علاقة من نوع متعدد إلى واحد سياقات محدودة متعددة في خدمة مصغرة واحدة لتبسيط العملية أو لتقليل النفقات التشغيلية. يجب أن يوازن اختيار العلاقة بين مبادئ تصميم المجال الموجه (DDD) وأهداف العمل والقيود التقنية والمتطلبات التشغيلية للنظام. [ 16 ]

أدوات بارزة

على الرغم من أن التصميم الموجه بالمجال لا يعتمد على أي أداة أو إطار عمل معين، إلا أن الأمثلة البارزة تشمل ما يلي:

  • Actifsource ، وهو مكون إضافي لـ Eclipse يمكّن من تطوير البرمجيات من خلال الجمع بين تصميم المجال الموجه بالنموذج والهندسة الموجهة بالنموذج وتوليد التعليمات البرمجية .
  • Context Mapper، وهي لغة وأدوات خاصة بالمجال للتصميم الموجه بالمجال الاستراتيجي والتكتيكي. [ 17 ]
  • CubicWeb ، إطار عمل مفتوح المصدر للويب الدلالي، يعتمد كليًا على نموذج بيانات. تسمح التوجيهات عالية المستوى بتحسين نموذج البيانات بشكل متكرر، إصدارًا تلو الآخر. يكفي تحديد نموذج البيانات للحصول على تطبيق ويب فعال. يلزم بذل المزيد من الجهد لتحديد كيفية عرض البيانات عندما لا تكون طرق العرض الافتراضية كافية.
  • OpenMDX هو إطار عمل مفتوح المصدر قائم على لغة جافا، يدعم Java SE و Java EE و .NET . يختلف OpenMDX عن أطر عمل MDA التقليدية في أنه "يستخدم النماذج لتوجيه سلوك وقت التشغيل للأنظمة التشغيلية بشكل مباشر" .
  • كائنات RESTful ، معيار لربط واجهة برمجة تطبيقات RESTful بنموذج كائنات المجال (حيث قد تمثل كائنات المجال كيانات أو نماذج عرض أو خدمات). يمكن لإطارَي عمل مفتوحَي المصدر (أحدهما لجافا والآخر لـ .NET) إنشاء واجهة برمجة تطبيقات كائنات RESTful من نموذج المجال تلقائيًا، باستخدام تقنية الانعكاس .

انظر أيضاً

مراجع

  1. ميليت، سكوت؛ تون، نيك (2015). أنماط ومبادئ وممارسات تصميم المجال الموجه . إنديانابوليس: وروكس. ISBN 978-1-118-71470-6.
  2. فيرنون، فون (2013). تطبيق تصميم المجال الموجه . أبر سادل ريفر، نيوجيرسي: أديسون-ويسلي. ص 3. ISBN  978-0-321-83457-7.
  3. 1 2 3 إيفانز، إريك (22 أغسطس 2003). تصميم قائم على المجال: معالجة التعقيد في صميم البرمجيات . بوسطن: أديسون-ويسلي. ISBN 978-032-112521-7تم الاطلاع عليه بتاريخ 12-08-2012 .
  4. مارتين كوان. "استخدام تصميم المجال الموجه التكتيكي لتصميم الخدمات المصغرة - مركز هندسة Azure" . learn.microsoft.com . تم الاطلاع عليه بتاريخ 7 سبتمبر 2024 .
  5. دليل هندسة تطبيقات مايكروسوفت، الطبعة الثانية. تم استرجاعه من http://msdn.microsoft.com/en-us/library/ee658117.aspx#DomainModelStyle .
  6. 1 2 3 كوي، يان. بنى الحوسبة بلا خوادم على AWS . مانينغ. ISBN 978-1617295423.
  7. إيفانز، إريك. مرجع تصميم المجال الموجه: التعريفات وملخصات الأنماط . ISBN 978-1457501197.
  8. فوت، برايان؛ يودر، جوزيف (1999)، كرة الطين الكبيرة ، تم الاطلاع عليه بتاريخ 9 مايو 2025
  9. هايوود، دان (2009)، تصميم قائم على المجال باستخدام الكائنات المجردة ، المبرمجون العمليون.
  10. يمكن اعتبار MDE مجموعة شاملة لـ MDA
  11. كابوت، جوردي (11 سبتمبر 2017). "مقارنة التصميم الموجه بالمجال مع الهندسة الموجهة بالنموذج" . لغات النمذجة . تم الاسترجاع في 5 أغسطس 2021 .
  12. تصميم التعلم الموجه بالمجال: مواءمة هندسة البرمجيات واستراتيجية الأعمال . ISBN 978-1098100131.
  13. هندسة البرمجيات الرشيقة المفتوحة™ - معيار من مجموعة Open Group . ISBN 9789401807265.
  14. أداة مايكروسوفت لاكتشاف الأخطاء
  15. أساسيات هندسة البرمجيات: منهج هندسي . دار نشر أورايلي ميديا. 2020. رقم ISBN 978-1492043454.
  16. بناء الخدمات المصغرة، تأليف سام نيومان . رقم ISBN 978-1492034025.
  17. ستيفان كابفيرر وأولاف زيمرمان: تصميم الخدمات الموجهة بالمجال - نمذجة السياق، وإعادة هيكلة النموذج، وتوليد العقود، الندوة الرابعة عشرة والمدرسة الصيفية حول الحوسبة الموجهة بالخدمات (SommerSoC 2020)