دانلود پادکست  با لینک مستقیم  

 

فصل اول  کتاب Domain-Driven Design The First 15 Years by DDD 

 

 

اینجا یک سند توضیحات مفصل بر اساس منابع ارائه شده است:

سند توضیحات: تقطیر DDD به اصول اولیه - اسکات میلت

این سند، خلاصه‌ای از مقاله "تقطیر DDD به اصول اولیه" نوشته اسکات میلت را ارائه می‌دهد که به بررسی دیدگاه نویسنده در مورد مفاهیم اصلی، چالش‌ها و اصول اولیه Domain-Driven Design (DDD) می‌پردازد. هدف اصلی مقاله، تشویق متخصصان فنی به فراتر رفتن از صرفا درک فنی و همسو شدن با دیدگاه، اهداف، استراتژی و محدودیت‌های کسب‌وکار است.

موضوعات اصلی:

  • همسویی عمیق با کسب‌وکار: مهمترین توصیه نویسنده، فراتر رفتن از درک صرف دامنه و همسو شدن با اهداف و چالش‌های کسب‌وکار است. او تاکید می‌کند که متخصصان فنی باید نگرانی‌های مشابهی با همکاران کسب‌وکار خود داشته باشند.
  • اهمیت IT در کسب‌وکار مدرن و شکاف بین فنی و غیرفنی: نویسنده اشاره می‌کند که نرم‌افزار نقش حیاتی در هر سازمانی دارد، اما اغلب تیم‌های فنی درک سطحی از دامنه دارند و بیشتر بر تکنولوژی به خاطر تکنولوژی تمرکز می‌کنند تا استراتژی و نیازهای کسب‌وکار. او روند همسویی نقش‌های فنی و غیرفنی در شرکت‌های پیشرو را ذکر می‌کند.
  • چالش‌های رایج در پیاده‌سازی DDD و تمرکز بیش از حد بر جنبه‌های فنی: بخش قابل توجهی از مقاله به این موضوع می‌پردازد که چرا راه‌حل‌های مبتنی بر DDD اغلب به نتیجه نمی‌رسند. نویسنده معتقد است این شکست‌ها ناشی از کمبود توانایی برنامه‌نویسی یا تخصص فنی نیست، بلکه به دلیل «کمبود درک، ارتباط و دانش کسب‌وکار» است. او بر تمرکز بیش از حد تیم‌ها بر الگوهای تاکتیکی DDD و نادیده گرفتن جنبه‌های غیرفنی و استراتژیک تاکید دارد.
  • اهمیت درک "چرا" و "چه چیزی" پیش از "چگونه": نویسنده به وضوح بیان می‌کند که فهم "چرا" (مشکل اصلی و هدف کسب‌وکار) و "چه چیزی" (مدل مورد نیاز برای حل آن) به مراتب مهمتر از فهم "چگونه" (پیاده‌سازی فنی) است.
  • پنج اصل اولیه DDD از دیدگاه نویسنده: بخش اصلی مقاله به تشریح پنج اصلی می‌پردازد که نویسنده از جنبه‌های غیرفنی DDD استخراج کرده است. این اصول شامل کسب توافق بر روی مشکل، همکاری در جهت یافتن راه‌حل، اطمینان از حل شدن مشکل اصلی، بهینه‌سازی کل سیستم و داشتن تأثیر مثبت بر تیم هستند.
  • نقش همکاری، ارتباط و یادگیری در موفقیت DDD: نویسنده به کرات بر اهمیت همکاری نزدیک با خبرگان دامنه، ارتباط شفاف بین تیم فنی و کسب‌وکار و تلاش مستمر برای یادگیری عمیق دامنه تاکید می‌کند.

مهمترین ایده‌ها و حقایق:

  • همسویی فنی با استراتژی کسب‌وکار: "شما باید همان نگرانی‌ها را با همکاران کسب‌وکار خود داشته باشید: آیا به بودجه خواهیم رسید؟ چگونه عرضه خود را در قلمروی جدید با موفقیت راه‌اندازی کنیم؟ چگونه گلوگاه در فرآیند تکمیل سفارش را برطرف کنیم؟" این همسویی به متخصصان فنی کمک می‌کند تا فرصت‌های محصولی با ارزش واقعی برای کسب‌وکار را شناسایی کنند.
  • شکاف دانش دامنه در تیم‌های فنی: "اغلب تیم‌های فنی تنها درک سطحی از دامنه‌ای که در آن کار می‌کنند دارند و در تجربه من بیشتر بر تکنولوژی به خاطر تکنولوژی تمرکز می‌کنند تا استراتژی و نیازهای یک کسب‌وکار."
  • دلیل اصلی شکست راه‌حل‌های DDD: "دلیل عدم موفقیت راه‌حل‌ها در ارائه، و دلیلی که باید بر اصول اولیه تمرکز کنیم، نه به دلیل کمبود توانایی برنامه‌نویسی یا تخصص فنی است، بلکه به دلیل کمبود درک، ارتباط، و دانش کسب‌وکار است."
  • تمرکز بر الگوهای تاکتیکی بدون درک زمینه: تیم‌هایی که "فقط با نوشتن کد سروکار دارند، بر الگوهای تاکتیکی DDD تمرکز می‌کنند. آن‌ها الگوهای سازنده را به جای یک راهنما، به عنوان یک کتاب مقدس در نظر می‌گیرند، بدون درک اینکه چه زمانی می‌توان قوانین را شکست."
  • ارزش واقعی DDD در جنبه‌های غیرفنی: "ارزش واقعی DDD در ایجاد یک زبان مشترک، خاص یک زمینه است که توسعه‌دهندگان و خبرگان دامنه را قادر می‌سازد تا به طور مؤثر بر روی راه‌حل‌ها همکاری کنند. کد محصول جانبی این همکاری است."
  1. پنج اصل اولیه پیشنهادی نویسنده:Gain Agreement On The Problem (کسب توافق بر روی مشکل): تمرکز بر انگیزه نیاز به یک راه‌حل و درک مشکل در زمینه وسیع‌تر کسب‌وکار. مشارکت در ارائه ارزش واقعی کسب‌وکار با همدلی با همکاران کسب‌وکار.
  2. Collaborate Towards A Solution (همکاری در جهت یافتن راه‌حل): فراتر رفتن از جمع‌آوری نیازمندی‌ها از طریق همکاری در چشم‌انداز و جهت‌گیری یک راه‌حل. کسب همسویی با سرمایه‌گذاری زمان و انرژی در زیردامنه مشکل اصلی.
  3. Ensure The Solution Solves The Core Problem (اطمینان از حل شدن مشکل اصلی): تمرکز بر نتایج (outcomes) به جای خروجی (output). اجتناب از دلبستگی به یک راه‌حل.
  4. Optimize the Overall System (بهینه‌سازی کل سیستم): داشتن مسئولیت مشترک برای کل سیستم/فرآیند. همسو شدن بر روی هدف تصویر بزرگ.
  5. Be a Positive Influence on the Team (داشتن تأثیر مثبت بر تیم): احترام، صبر و نشان دادن اشتیاق. نمایش فروتنی و همدلی با دیگران.
  • نقش توسعه‌دهنده به عنوان حل‌کننده مشکل: "یک توسعه‌دهنده نرم‌افزار در درجه اول یک حل‌کننده مشکل است. وظیفه آن‌ها حذف موانعی است که مانع از تولید ارزش توسط کسب‌وکار می‌شود، نه تولید کد."
  • اهمیت درک "چرا" پشت نیازمندی‌ها: "باید از کاربران کسب‌وکار که درخواست بهبود در نرم‌افزار موجود را دارند، بر حذر باشید، زیرا آن‌ها اغلب نیازمندی‌هایی را به شما می‌دهند که بر اساس محدودیت‌های سیستم‌های فعلی استوار است، نه آنچه واقعاً می‌خواهند."
  • تمرکز بر بخش‌های "جالب" و "سخت" دامنه: "هنگام انتخاب سناریوها برای مدل‌سازی، به دنبال میوه آسان (low-hanging fruit) نروید؛ مدیریت ساده داده‌ها را نادیده بگیرید. در عوض، به سراغ بخش‌های سخت بروید - مناطق جالب در عمق دامنه اصلی."
  • ارزش فرآیند مدل‌سازی و اکتشاف: "نتیجه پرداختن به یک مشکل از زوایای مختلف، ایجاد یک مدل کامل نیست، بلکه یادگیری و کشف مفاهیم در دامنه مشکل است. این به مراتب ارزشمندتر است."
  • نقش روابط سازمانی و فنی در موفقیت: "اغلب، تیم‌هایی که سایر زمینه‌ها (contexts) را مدیریت می‌کنند، با نیروهای مشابهی انگیزه ندارند، یا اولویت‌های متفاوتی دارند. برای موفقیت راه‌حل‌ها، تیم‌ها معمولاً نیاز به مدیریت تغییرات در این موقعیت‌ها در سطح سیاسی و نه فنی دارند."
  • اهمیت مهارت‌های نرم: "کار تیمی و ارتباط به اندازه توانایی فنی برای ارائه تغییر در دامنه‌های بزرگ یا پیچیده ضروری است. اشتیاق و توانایی یادگیری، موضوعات فنی و غیرفنی، نیز مهارت‌های کلیدی مورد نیاز اعضای تیم هستند."

تکنیک‌ها و مفاهیم مرتبط ذکر شده:

  • Event Storming: یک فعالیت کارگاهی برای درک سریع دامنه مشکل به صورت بصری و مشارکتی.
  • Impact Mapping: تکنیکی برای درک بهتر اینکه چگونه می‌توان بر نتایج کسب‌وکار تأثیر گذاشت.
  • Business Model Canvas: ابزاری برای بصری‌سازی مدل کسب‌وکار یک شرکت.
  • Theory of Constraints (TOC): یک پارادایم مدیریتی که بر شناسایی و حذف گلوگاه‌ها برای بهینه‌سازی کل سیستم تمرکز دارد.
  • Deliberate Discovery: روشی برای بهبود دانش دامنه با تمرکز بر مناطقی که تیم از آن‌ها ناآگاه است.
  • Bounded Contexts: مفهومی در DDD برای تقسیم مدل‌های بزرگ به مدل‌های کوچکتر و مستقل.
  • Ubiquitous Language (UL): زبان مشترکی که توسط تیم فنی و خبرگان دامنه استفاده می‌شود.
  • Model Exploration Whirlpool: روشی برای مدل‌سازی و استخراج دانش در هنگام برخورد با مشکلات پیچیده.
  • Context Map: ابزاری برای بصری‌سازی روابط بین زمینه‌های محدود.

خلاصه:

اسکات میلت در این مقاله تاکید می‌کند که موفقیت در DDD نه تنها به مهارت‌های فنی، بلکه مهمتر از آن به همسویی عمیق با اهداف کسب‌وکار، درک ریشه مشکلات، همکاری مؤثر با خبرگان دامنه و تمرکز بر نتایج کسب‌وکار بستگی دارد. او پنج اصل اولیه را معرفی می‌کند که تیم‌های فنی را تشویق می‌کنند تا نگاهی جامع‌تر به فرآیند توسعه نرم‌افزار داشته باشند و خود را به عنوان بخشی جدایی‌ناپذیر از کسب‌وکار در نظر بگیرند. نادیده گرفتن جنبه‌های غیرفنی و تمرکز صرف بر الگوهای کدنویسی، دلیل اصلی عدم موفقیت در بهره‌گیری کامل از پتانسیل DDD است. DDD یک سفر مستمر یادگیری و اکتشاف است که نیازمند تعامل، فروتنی و تمایل به چالش کشیدن فرضیات است.