کشف دامنه: اولین قدم در معماری نرمافزارهای قدرتمند
تا به حال شده که یک پروژه را با فرض اینکه همه چیز را میدانید، شروع کنید و در میانه راه متوجه شوید که چیزهای زیادی را نادیده گرفتهاید؟ در دنیای توسعه نرمافزار، این اتفاق به دفعات میافتد. ما اغلب عجله داریم که مستقیم به سراغ کدنویسی برویم، در حالی که مهمترین مرحله را فراموش میکنیم: درک عمیق از مسئلهای که قرار است حل کنیم.
اینجاست که Domain Discovery یا "کشف دامنه" وارد میدان میشود، اولین و مهمترین گام در طراحی استراتژیک Domain-Driven Design (DDD).
چرا کشف دامنه اینقدر حیاتی است؟
تصور کنید که در حال ساخت یک سیستم مدیریت کتابخانه هستید. ممکن است فکر کنید که دامنه شامل "کتابها"، "اعضا" و "امانت" است. اما آیا این تمام ماجراست؟
چه اتفاقی میافتد اگر یک کتاب دیر بازگردانده شود؟ قوانین جریمهها چگونه است؟ آیا کتابهای مرجع (Reference Books) قوانین خاصی دارند؟ این جزئیات مهم، اغلب در ابتدای کار نادیده گرفته میشوند، اما پیچیدگی اصلی کسبوکار در همین جزئیات نهفته است.
کشف دامنه، فرآیند گفتگو، تحقیق و تحلیل برای درک کامل و دقیق دنیای واقعی کسبوکار است. این فرآیند ما را مجبور میکند که به جای حدس و گمان، به سراغ متخصصان و کاربران واقعی برویم و از آنها یاد بگیریم.
تکنیکهای کشف و درک عمیق
این فرآیند، تنها به چند جلسه پرسش و پاسخ ساده محدود نمیشود. ابزارها و تکنیکهای قدرتمندی برای این کار وجود دارند:
- مصاحبه با متخصصان (Domain Experts): متخصصان کسبوکار، گنجینههای اطلاعاتی هستند. آنها دنیای واقعی را میفهمند و میتوانند به شما بگویند که "قوانین بازی" چیست.
- مشاهده و مشارکت: با کاربران نهایی صحبت کنید. ببینید چگونه کارها را انجام میدهند. در فرآیندهای آنها مشارکت کنید تا پیچیدگیها و چالشهای واقعی را از نزدیک لمس کنید.
- نمودار جریان کار (Workflow Diagrams): با رسم نمودارها، فرآیندها را از ابتدا تا انتها تجسم کنید. این کار به شما کمک میکند تا مراحل، تصمیمگیریها و شرایط خاص را شناسایی کنید.
- Event Storming: این یک کارگاه تعاملی و پرانرژی است که در آن، تمام اعضای تیم (فنی و کسبوکار) دور هم جمع میشوند و با استفاده از یادداشتهای چسبان (sticky notes) رویدادهای مهم (مثلاً "کتاب امانت گرفته شد") و فرآیندهای کسبوکار را ترسیم میکنند.
کشف دامنه به ما اجازه میدهد تا از یک دید سطحی به یک دید عمیق و سهبعدی از کسبوکار برسیم. این مرحله، سنگ بنای تمام مراحل بعدی در DDD است. اگر این مرحله به درستی انجام نشود، تمام تلاشهای بعدی برای طراحی نرمافزار، بر روی یک پایه سست بنا خواهد شد.
به این فکر کنید:
- آخرین باری که یک پروژه را شروع کردید، چقدر زمان را به درک کامل مسئله اختصاص دادید؟
- چه چیزی را ممکن است نادیده گرفته باشید که بعدها به یک مشکل بزرگ تبدیل شده است؟
با آغوش باز به استقبال پیچیدگیهای دامنه بروید و آنها را به چالش بکشید. در همین فرآیند کشف، خواهید دید که راهحلهای هوشمندانه خودبهخود نمایان میشوند.
Event Storming: طوفان فکری برای نقشهبرداری از دنیای واقعی 🤯
تا به حال در پروژهای بودهاید که در آن، هر یک از اعضای تیم دیدگاه متفاوتی نسبت به فرآیندهای کسبوکار داشته باشند؟ متخصصان کسبوکار، توسعهدهندگان و حتی مدیران، هر یک از دریچه خود به مسئله نگاه میکنند. این عدم تفاهم، یکی از بزرگترین موانع در ساخت نرمافزارهای پیچیده است.
در Domain-Driven Design (DDD)، ما به دنبال ابزارهایی هستیم که این شکاف را پر کند و به یک درک مشترک از دامنه برسیم. Event Storming یکی از قدرتمندترین و جذابترین این ابزارهاست.
Event Storming چیست؟
Event Storming، در نگاه اول، یک کارگاه ساده و پرانرژی است. تمام اعضای تیم، از متخصصان دامنه گرفته تا توسعهدهندگان، در یک اتاق بزرگ دور هم جمع میشوند. ابزار اصلی ما؟ ماژیک و تعداد زیادی یادداشت چسبان (Sticky Notes) در رنگهای مختلف.
هدف اصلی، شناسایی و ترسیم تمام رویدادهای دامنه (Domain Events) است که در یک سیستم اتفاق میافتند. رویدادهای دامنه، به اتفاقات مهمی اشاره دارند که در گذشته رخ دادهاند و برای کسبوکار ارزشمند هستند.
- رویدادها به رنگ نارنجی: هر رویداد با یک یادداشت نارنجی رنگ نوشته میشود. مثلاً "کتاب امانت گرفته شد" یا "سفارش پرداخت شد".
- ترسیم خط زمان: این یادداشتها به صورت زمانی روی دیوار چیده میشوند، از گذشته به آینده. این کار به ما کمک میکند تا کل فرآیند را به صورت یک داستان بصری دنبال کنیم.
- کشف جزئیات: همانطور که رویدادها را روی دیوار میچسبانید، سوالاتی مطرح میشود: "چه چیزی باعث این رویداد شد؟"، "چه کسی این کار را انجام داد؟" یا "چه اطلاعاتی برای این رویداد لازم است؟"
اینجاست که جادوی Event Storming اتفاق میافتد. با همکاری همه، سایر عناصر دامنه نیز به تدریج کشف و با رنگهای دیگر مشخص میشوند:
- فرمانها (Commands) به رنگ آبی: عملهایی که باعث وقوع یک رویداد میشوند. مثلاً "ثبت سفارش".
- موجودیتها (Aggregates) به رنگ زرد: مدلهایی که مسئول اجرای یک فرمان و تولید یک رویداد هستند.
- افراد یا سیستمها (Actors) به رنگ صورتی: کسانی که فرآیند را آغاز میکنند.
چرا Event Storming اینقدر مؤثر است؟
- همترازی تیمها: وقتی همه در یک اتاق و رو به روی یک دیوار مشترک هستند، دیدگاههای متفاوت به یک درک واحد تبدیل میشود. توسعهدهنده متوجه پیچیدگیهای کسبوکار میشود و متخصصان کسبوکار، محدودیتهای فنی را درک میکنند.
- کشف ابهامات و نقاط کور: با دیدن کل فرآیند به صورت بصری، ابهاماتی که در گفتگوهای ساده پنهان میمانند، آشکار میشوند.
- برقراری زبان مشترک: Event Storming بهترین روش برای ایجاد و تثبیت Ubiquitous Language (زبان مشترک) است. واژههایی که روی دیوار نوشته میشوند، به صورت مستقیم وارد کد و مکالمات روزمره تیم خواهند شد.
به این فکر کنید: آیا تا به حال در پروژهای بودهاید که در آن، یک عبارت، معانی مختلفی برای افراد مختلف داشته باشد؟ اینجاست که Event Storming به عنوان یک ستون فقرات برای جلوگیری از چنین مشکلاتی عمل میکند.
Event Storming نه تنها یک تکنیک، بلکه یک تجربه مشترک و یک گفتگوی پربار است که به ما کمک میکند تا از یک دیدگاه تکی و جزیرهای، به یک دیدگاه جامع و یکپارچه از دامنه برسیم. این فرآیند، اولین گام عملی برای تبدیل پیچیدگی کسبوکار به یک مدل نرمافزاری واضح و قدرتمند است.