سخن پایانی
سخن پایانی
برای پایان دادن به سفرمان در طراحی دامنهمحور، نویسنده به نقلقولی بازمیگردد که کتاب با آن آغاز شد:
پیش از آنکه دربارهٔ مسئله توافق کنیم، صحبت دربارهٔ راهحل بیمعناست؛ و پیش از آنکه دربارهٔ راهحل توافق کنیم، صحبت دربارهٔ گامهای پیادهسازی بیمعناست.
— Efrat Goldratt-Ashlag
این جمله مسیر DDD را بهخوبی خلاصه میکند: مسئله → راهحل → پیادهسازی.
مسئله
برای ارائهٔ راهحل نرمافزاری، نخست باید مسئله را بفهمیم: در چه دامنهٔ کسبوکاری کار میکنیم، هدفهای کسبوکار چیست و راهبرد رسیدن به آنها کدام است. زبان فراگیر ابزار کسب فهم عمیق از دامنه و منطق آن است؛ منطقی که قرار است در نرمافزار پیاده شود.
پیچیدگی مسئلهٔ کسبوکار را با تقسیم آن به Bounded Contextها مدیریت کردیم. هر Bounded Context یک مدل واحد از دامنه را برای حل مسئلهای مشخص پیاده میکند. همچنین یاد گرفتیم بلوکهای سازندهٔ دامنه را به Core، Supporting و Generic Subdomain تقسیم کنیم.
جدول E-1 — مقایسهٔ سه نوع دامنهٔ فرعی| نوع | مزیت رقابتی | پیچیدگی | نوسان | راهبرد پیادهسازی | ماهیت مسئله |
| Core | بله | زیاد | زیاد | داخل سازمان | جالب/حلنشده |
| Generic | خیر | زیاد | کم | خرید/پذیرش راهحل موجود | حلشده |
| Supporting | خیر | کم | کم | داخل سازمان یا برونسپاری | بدیهی |
راهحل
از این دانش برای طراحی راهحل متناسب با نوع دامنه استفاده کردیم. چهار الگوی پیادهسازی منطق کسبوکار—Transaction Script، Active Record، Domain Model و Event-Sourced Domain Model—و موقعیت مناسب هر کدام را بررسی کردیم. سه الگوی معماری—Layered Architecture، Ports & Adapters و CQRS—اسکلت لازم برای اجرای این منطق را فراهم میکنند. شکل E-1 در منبع، درخت تصمیم طراحی تاکتیکی را خلاصه میکند و در بازنمایی تصویری همان صفحه در این مقاله حفظ شده است.
پیادهسازی
در بخش سوم دیدیم نظریه چگونه وارد عمل میشود: با EventStorming زبان فراگیر را میسازیم، طراحی را همراه تکامل دامنه زنده نگه میداریم و DDD را حتی در پروژههای Brownfield و Legacy بهتدریج وارد میکنیم.
در بخش چهارم رابطهٔ DDD با Microservices، Event-Driven Architecture و Data Mesh را بررسی کردیم. این تکنیکها نهتنها میتوانند در کنار DDD استفاده شوند، بلکه در بسیاری از موارد یکدیگر را تکمیل میکنند.
مطالعهٔ بیشتر
نویسنده برای ادامهٔ یادگیری کتابهای زیر را توصیه میکند. عنوانها و مشخصات کتابشناختی بدون ترجمهٔ آزاد نگه داشته شدهاند.
طراحی دامنهمحور پیشرفته
- Evans, E. (2003). Domain-Driven Design: Tackling Complexity in the Heart of Software. Addison-Wesley.
کتاب اصلی Eric Evans که روش DDD را معرفی کرد. با وجود اینکه برخی مفاهیم جدیدتر مانند Domain Event و Event Sourcing در آن به شکل امروز مطرح نشدهاند، برای رسیدن به تسلط عمیق بر DDD هنوز مطالعهای اساسی است.
- Martraire, C. (2019). Living Documentation: Continuous Knowledge Sharing by Design. Addison-Wesley.
Cyrille Martraire رویکردی مبتنی بر DDD برای اشتراک دانش، مستندسازی و آزمون ارائه میکند.
- Vernon, V. (2013). Implementing Domain-Driven Design. Addison-Wesley.
کلاسیک دیگری از DDD که Vaughn Vernon در آن تفکر دامنهمحور و ابزارهای راهبردی و تاکتیکی را با مثالهای عمیق بررسی میکند؛ از جمله داستان تیمهایی که از اجرای ناموفق DDD به مسیر اصلاحشده بازمیگردند.
- Young, G. (2017). Versioning in an Event Sourced System. Leanpub.
موضوع آن همان چالش تکامل سیستم رویدادمنبع است که در فصل ۷ مطرح شد.
الگوهای معماری و یکپارچهسازی
- Dehghani, Z. (در زمان نگارش، انتشار مورد انتظار 2022). Data Mesh: Delivering Data-Driven Value at Scale. O’Reilly.
Zhamak Dehghani خالق Data Mesh است و اصول و اجرای این معماری مدیریت داده را شرح میدهد.
- Fowler, M. (2002). Patterns of Enterprise Application Architecture. Addison-Wesley.
کتاب کلاسیک الگوهای معماری برنامه که تعریفهای Transaction Script، Active Record و Domain Model از آن آمدهاند.
- Hohpe, G., & Woolf, B. (2003). Enterprise Integration Patterns: Designing, Building, and Deploying Messaging Solutions. Addison-Wesley.
منبع بسیاری از الگوهای Integration فصل ۹ و مجموعهای گستردهتر از الگوهای ارتباط مؤلفهها.
- Richardson, C. (2019). Microservice Patterns: With Examples in Java. Manning.
مثالهای دقیق از الگوهای معماری Microservice؛ از جمله Saga، Process Manager و Outbox.
نوسازی سیستمهای Legacy
- Kaiser, S. (در زمان نگارش، انتشار مورد انتظار 2022). Adaptive Systems with Domain-Driven Design, Wardley Mapping, and Team Topologies. Addison-Wesley.
تجربهٔ نوسازی Legacy با DDD، Wardley Mapping و Team Topologies.
- Tune, N. (در زمان نگارش، انتشار مورد انتظار 2022). Architecture Modernization: Product, Domain, & Team Oriented. Leanpub.
بررسی عمیق استفاده از DDD و تکنیکهای دیگر برای نوسازی معماری Brownfield.
- Vernon, V., & Jaskula, T. (2021). Implementing Strategic Monoliths and Microservices. Addison-Wesley.
کتابی عملی دربارهٔ کشف و یادگیری سریع، رویکردهای دامنهمحور و پیچیدگی پیادهسازی درست Monolith و Microservice با تمرکز بر راهبرد نوآورانهٔ کسبوکار.
- Vernon, V., & Jaskula, T. (2021). Strategic Monoliths and Microservices. Addison-Wesley.
تمرکز بر تفکر راهبردی، یادگیری مبتنی بر کشف و انتخاب معماری متناسب—Microservice، Monolith یا ترکیبی از آنها.
EventStorming
- Brandolini, A. (در زمان نگارش هنوز منتشر نشده). Introducing EventStorming. Leanpub.
Alberto Brandolini، خالق EventStorming، فرایند و منطق پشت آن را با جزئیات توضیح میدهد.
- Rayner, P. (در زمان نگارش هنوز منتشر نشده). The EventStorming Handbook. Leanpub.
Paul Rayner تجربهٔ عملی تسهیل EventStorming و نکتههای اجرای جلسهٔ موفق را ارائه میکند.
نتیجهگیری نهایی
نویسنده از خواننده تشکر میکند و امیدوار است آموختههای کتاب در عمل به کار گرفته شود. مهمترین پیام او منطق و اصول پشت ابزارهای DDD است: DDD را کورکورانه بهعنوان دگم دنبال نکنید؛ استدلال زیر هر ابزار را بفهمید. همین فهم فرصتهای استفادهٔ موفق از DDD را افزایش میدهد و اجازه میدهد مفاهیم آن را بهصورت مستقل نیز، بهویژه در پروژههای Brownfield، به کار بگیرید.
و جملهٔ پایانی: همیشه مراقب زبان فراگیرتان باشید؛ و وقتی شک دارید، EventStorming انجام دهید. موفق باشید.
شکلها و جدولهای منبع
برای حفظ نمایش بصری دقیق عناصر گرافیکی، بازنمایی صفحههای دارای شکل یا جدول منبع در ادامه آمده است. متن آموزشی فصل در بخشهای بالا به فارسی ترجمه شده است.
بازنمایی صفحهٔ 293 منبع برای حفظ دقیق شکل/جدول اصلی. Table E-1. The three types of subdomains
بازنمایی صفحهٔ 294 منبع برای حفظ دقیق شکل/جدول اصلی. Figure E-1. Decision tree summarizing heuristics for tactical decision-making