تصميم سياق محدود مع لوحة سياق محدد: وصفة ورشة العمل

من بين مواضيع مؤتمر TechLead Conf 2020 القادم مناقشة تفصيلية للتصميم المستند إلى النطاق و EventStorming. بالإضافة إلى إعداد تقرير من فتحتين من قبل كونستانتين جوستوف حول DDD ، وتقرير من سيرجي بارانوف عن EventStorming ، وخطاب مبتكر سنقوم خلاله بإنشاء رادار DDD ، قررنا ترجمة مقال حول واحدة من أكثر الأساليب شعبية لتصميم سياق محدد.

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

في DDD ، يتحلل نظام كبير في سياقات محدودة (تعليق من مترجم: سيشار إليها فيما بعد بسياقات محدودة) ، والتي تصبح حدودًا طبيعية - مثل الخدمات الدقيقة في التعليمات البرمجية وفرق في منظمة.

لا توجد طريقة لتحديد الحدود الجيدة للسياق المحدود بسرعة وسهولة. وهذا يتطلب معرفة واسعة ومتعمقة للأعمال ومجال الموضوع. تم تصميم تنسيق ورشة العمل هذا لتلبية كل من هذه الاحتياجات ويستخدم أداتين للعثور على تصميم النظام الأكثر فعالية: EventStorming و Bounded Context Canvas.

صورة

“لقد طورت هذه اللوحة أثناء إجراء ورش عمل DDD في المناسبات العامة وجلسات الشركات. لا تتردد في تغيير هيكلها إذا وجدت التنسيقات الأنسب لك. "

وصفة


تتكون الوصفة الرئيسية مما يلي:

  1. EventStorming (ساعة واحدة على الأقل).
  2. نمذجة المرشحين لسياق محدود (30 دقيقة على الأقل).
  3. نمذجة تدفق رسائل المجال (30 دقيقة على الأقل).
  4. إطار سياق محدد (90 دقيقة على الأقل).
  5. إنشاء خرائط سياقية (45 دقيقة على الأقل).

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

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

المبادئ الأساسية للنمذجة


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

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

1. EventStorming


لتصميم نظام ، تحتاج إلى شيئين: فكرة عامة جيدة بما يكفي عن النظام بأكمله وفهم عميق إلى حد ما للتفاصيل في كل مجال. للقيام بذلك ، دعنا نبدأ بـ EventStorming .

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

صورة

إذا كانت هذه هي المرة الأولى التي تقوم فيها بذلك ، فإنني أوصيك بتخصيص ساعة أو ساعتين في EventStorming. بعد الانتهاء من EventStorming ، أوصي بالتقسيم إلى مجموعات من 4 أشخاص.
في TechLead Conf 2020 ، سيتحدث سيرجي بارانوف عن الخبرة العملية مع EventStorming .

2. البحث عن مرشحين للسياق المحدود


بعد أن يتم تصميم نطاقك بشكل واسع وعميق على EventStorming ، يمكنك البدء في تجميع الأجزاء ودمجها في سياق محدود.

صورة

هناك العديد من الطرق لتحديد السياق المحدود. أوصي بالبدء بما يلي:

  • ابدأ بالقيمة - حدد الأجزاء الأساسية من النطاق الأكثر قيمةً للنشاط التجاري.
  • ابدأ بواحد بسيط - قم بإنشاء نموذج ساذج عن طريق كسر الجدول الزمني إلى خطوات متتالية.
  • ابحث عن الأحداث الرئيسية - الأحداث التجارية التي تؤثر على أجزاء مختلفة من عملية الأعمال.

لأول مرة ، لا تنفق أكثر من 30 دقيقة في هذه المهمة. قم بدعوة المجموعة لإنشاء نموذج السياق الأصلي المحدد كنقطة بداية. لا يجب أن تكون مثالية ومن غير المحتمل أن تكون الحل النهائي.

يجب أن يكون الناتج في قائمة بأسماء السياق المقيدة على لوح ورقي أو ورقة. لا يمكنك تعديل EventStorming ماديًا إذا كان لديك مجموعات متعددة.

الخطوات التالية


قد ترى على الفور عدة طرق لنمذجة النظام. في الوقت الحالي ، اختر أحدها للعمل واكتب نماذج أخرى ممكنة (ستكون مفيدة لاحقًا). يمكنك أيضًا أن تفهم أنك تفتقد إلى معلومات المجال. إذا كان الأمر كذلك ، فقم بجولة أخرى من EventStorming.

3. نمذجة تدفق رسالة المجال


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

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

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

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

صورة
مثال خيالي لتدفق رسائل المجال

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

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

الخطوات التالية


نظرًا لأن تدفقات نطاقك تحدد العلاقة بين السياقات المقيدة ، يمكنك على الفور اكتشاف عيوب التصميم الواضحة. يمكنك الرجوع إلى الإجراء السابق وتحديث المرشحين لسياق محدود أو إجراء تكرار ثانٍ لـ EventStorming. يمكنك أيضًا كتابة أفكارك حول التصميم وجمع المزيد من المعلومات حول الخطوات التالية قبل بدء إعادة التصميم.

4. قماش السياقات يحدها


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

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

4.1 تعريف السياق العام


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

بعد ذلك ، تحتاج إلى إجراء تصنيف استراتيجي. هل السياق المحدود هو الجزء الرئيسي من النظام ، عنصر مساعد ، عنصر مشترك أو شيء آخر؟ اقرأ منشور فلاد إذا كنت بحاجة إلى مساعدة في الاختيار.

صورة
على سبيل المثال ، لوحة سياق محددة مليئة بعد المرور بالخطوة الأولى.

الخطوات التالية


إذا لم تتمكن من التوصل إلى اسم واضح ، أو كتابة وصف متماسك ودقيق ، أو إذا كانت مصطلحاتك الخاصة بالغة في كل مكان (UL) غامضة ، ففكر في ذلك كملاحظات على تصميمك. ضع في اعتبارك إعادة تصميم الحدود أو تدوين ملاحظة والعودة لاحقًا (من الأفضل عادةً العودة لاحقًا).

4.2 توضيح قواعد العمل وتشكيل لغة مشتركة


عد الآن إلى EventStorming وانظر إلى الملاحظات الخاصة بهذا السياق المحدود. ابحث عن أهم قواعد وسياسات العمل ، ثم حاول تحديد أهم 3 قواعد وإضافتها إلى اللوحة.
سيتحدث كونستانتين جوستوف في TechLead Conf 2020 عن سنوات عديدة من الخبرة في اللغة في كل مكان ومكونات DDD الأخرى في Raiffeisen.
هذا هو الوقت المناسب أيضًا للبحث عن كلمات أو عبارات عمل رئيسية لإضافتها إلى اللوحة القماشية في قسم اللغة في كل مكان. ستستمر في إضافة الكلمات والعبارات طوال ورشة العمل ، والآن هذه ليست سوى نقطة البداية.

صورة

4.3 تحليل الميزات


الخطوة التالية هي استكشاف الاحتمالات التي يوفرها السياق المحدود. هذا لا يوضح فقط ما يفعله ، ولكنه يعطي أيضًا الكثير من التعليقات للتصميم. يمكنك طرح أسئلة مثل:

  • هل هذا السياق مثقل بالمسؤوليات؟
  • هل تبدو الفرص مرتبطة؟
  • هل تتطابق القدرات مع اسم ووصف السياق؟
  • ماذا لو نقلنا هذه الفرصة خارج السياق؟

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

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

قد تشعر أن المسؤولية غير مناسبة ويجب أن تتعلق بسياق آخر محدود. إذا كان الأمر كذلك ، فحدده بنوع من علامة التعريف على الملصق.

صورة

الخطوات التالية


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

قدرات تعميق [اختياري]


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

4.4 التبعيات


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

من خلال استعراض نتيجة EventStorming والرسوم البيانية لتدفق المجال ، حدد كل تبعية لها سياق محدد واكتب المعلومات التالية:

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

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

صورة

4.5 النقد البناء


عند الانتهاء من ملء اللوحة ، خذ بضع دقائق لإجراء تقييم نقدي للتصميم الناتج لسياقك المقيّد. قسّم تعليقاتك إلى الفئات التالية:

  • جيد : جوانب التصميم التي تحبها.
  • سيئ : جوانب التصميم التي لا تحبها.
  • غير متأكد : جوانب التصميم التي لست متأكدًا منها.

4.6. التأمل والتكرار


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

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

5. إنشاء خرائط السياق


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

نتيجة هذا التمرين هي مجموعة من خرائط السياق الأساسية - تصورات للعلاقات الهيكلية بين السياقات المقيدة وأي مخططات أخرى تراها ضرورية ، مثل الرسوم البيانية لتدفق المجال. يجب على كل فريق تطوير ما لا يقل عن 3 خرائط سياق ، سيظهر كل منها الخيارات الممكنة لبناء النظام.

صورة
مثال لخريطة سياق دقيقة للغاية ، يكفي ورشة العمل هذه.

سنحمل mitap في TechLead Conf 2020 ، حيث سنحلل التقنيات والأنماط المختلفة والأنماط المضادة لـ DDD ونجمع رادارًا مرئيًا. والتي سيتم نشرها بعد المؤتمر.
يمكن تنفيذ النشاط النهائي في شكل حر. الهدف هو مراجعة المعلومات التي تم جمعها واستخدامها لتطوير عدد من تصميمات النظام. كنقطة بداية ، أوصي:

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

إذا كنت تفضل تصور هذه التحولات ، فقد تكون الرسوم التوضيحية التالية مفيدة:

صورة

صورة

صورة

اختتام ورشة العمل


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

ما يجب عليك مراعاته في العرض التقديمي:

  • : .
  • : .
  • , , .

- TechLead Conf 8 9 . 32 , , , , DDD .

- — ( , ). , .

All Articles