سروش محمدی
سروش محمدی
خواندن ۲ دقیقه·۲ سال پیش

معماری مسئله محور DDD

اگر مطالب قبلی من رو خونده باشید متوجه تاکید زیاد روی بیزینس مشتری به جای تکنیک های فنی میشید. مشتری با توجه به بیزینسی که داره یک مشکل را ارائه میده(Problem Domain). این مشکل با یک زبان مشترک بین همه تیم ها ارائه میشه و مستنداتش تهیه میشه(Ubiquitous Language). پس الان مشکل را میدونیم و به صورت مشترک مستند سازی های اولیه انجام شده. حالا قرارداد و مسائل مالی بین کارفرما و پیمانکار رو حل میکنیم و میشینیم سر کد نویسی.

اول باید دامنه رو ایجاد کنیم(Domain). برای این مسئله یک دامنه اصلی ایجاد میکنیم. و حالا مسئله را به مسائل کوچیکتر میشکنیم تا زیر دامنه ها(Sub Domain) ساخته بشند. اینکار رو اینقدر ادامه میدیم که مسئله بزرگ به کوچکترین مسائل تبدیل بشه.

دقت داشته باشید که زیاد کوچک شدن مسئله باعث از بین رفتن صورت اصلی سوال نشه. در واقع انتخاب  sub domain ها یک موضوع کاملا نسبی است، به تیم بستگی دارد و هیچ قاعده و قانون ثابتی ندارد.

خب حالا باید با استفاده از زبان مشترک پیاده سازی زیر مسئله ها انجام بشه. با استفاده از زبان برنامه نویسی مناسب و دیتابیس خوب این کارها را انجام میدیم.

در بین زیر مسئله های مواردی هستند که مشترک بین همه استفاده میشند یا مواردی که برای پشتیبانی از بقیه ایجاد میشند و برای مشکل خاصی برنامه نویسی نشدند و عمومی هستند. به این موارد دامنه پشتیبان و دامنه عمومی (Supporting Domain و Generic Domain) گفته میشه.

روند کلی کار به این صورت میشه که کار بزرگ به کارهای کوچک تقسیم میشه. هر کاری با استفاده از متد برنامه نویسی مورد نظر(مثل TDD) پیاده سازی میشه. نتایج کارهای کوچک تجمیع میشند و نتیجه نهایی به دست میاد.

روند کلی کار
روند کلی کار

در این بین لایه هایی هم ایجاد میشند که برای جلوگیری از ارتباط مستقیم بین بقیه و واسطه گری استفاده خواهند شد(Anti-Corruption Layer).

اولین چالش ارتباط بین زیر مسئله ها با هم یا ارتباط بین مسئله های اصلی با هم هست. چند نوع ارتباط وجود داره:

  • روش Seprate Ways
  • روش Customer-Supplier
  • روش Conformist
  • روش Partnership
  • روش Anticorruption Layer
  • روش Shared Kernel
  • روش Published language
  • روش Open Host Service

با ترکیب این روش ها میتوان ارتباط بین زیر مسائل را حل کرد

من محمد(سروش) محمدی هستم و سالهای زیادی هست که درحال کار در حوزه برنامه نویسی هستم. میخوام وقتی باز کنم و برای خودم و شما از برنامه نویسی بنویسم.
برنامه نویسیddd
شاید از این پست‌ها خوشتان بیاید