فصل دوم: طراحی مرزهای سرویس

شناسایی Bounded Context

یک مفهوم، معانی متفاوت در بخش‌های مختلف

مفهوم کلیدی دیگر در DDD، Bounded Context است: مرزی که در داخل آن، یک مدل داده و یک زبان مشخص معنای ثابتی دارند. نکته‌ی جالب این است که یک واژه‌ی یکسان می‌تواند در دو Bounded Context مختلف معنای کاملاً متفاوتی داشته باشد.

مثلاً واژه‌ی «محصول» (Product) در سرویس کاتالوگ به معنای نام، توضیحات، تصویر و قیمت نمایشی است. اما همان «محصول» در سرویس موجودی، به معنای شناسه‌ی انبار، تعداد موجود و مکان قفسه است. تلاش برای ساختن یک مدل «محصول» واحد که همه‌ی این نیازها را پوشش دهد، باعث می‌شود آن مدل بیش‌ازحد بزرگ و شکننده شود. راه‌حل DDD این است که هر Bounded Context مدل خودش را داشته باشد و فقط از طریق شناسه (مثلاً product_id) به یکدیگر ارجاع دهند.

Context Map: نقشه‌ی ارتباط بین سرویس‌ها

برای مستندسازی این مرزها و روابط بین آن‌ها از ابزاری به نام Context Map استفاده می‌شود که نشان می‌دهد کدام سرویس‌ها به هم وابسته‌اند و نوع رابطه‌شان چیست؛ مثلاً یک سرویس ممکن است «مشتری بالادست» (Upstream) و دیگری «مشتری پایین‌دست» (Downstream) باشد. در عمل، برای شناسایی این مرزها، تکنیکی به نام Event Storming بسیار محبوب است: جلسه‌ای گروهی که در آن تیم فنی و کسب‌وکار با نوشتن رویدادهای کلیدی سیستم روی کاغذهای رنگی، به‌تدریج مرزهای طبیعی سرویس‌ها را کشف می‌کنند. این کار پیش از نوشتن حتی یک خط کد، سرمایه‌گذاری بسیار ارزشمندی است.

برای ذخیره‌ی پیشرفت و شرکت در آزمون، وارد شوید — رایگان است.