Implementing Domain-Driven Design
وقتی که بچه بودم، پدرم خلبانی هواپیماهای کوچک را یاد گرفته بود. اغلب کل خانواده میتوانستند به پرواز بروند. گاهی اوقات ما برای ناهار به فرودگاه دیگری پرواز میکردیم و پس از آن بر میگشتیم. وقت هایی که پدر وقت کمی داشت ولی دلش برای پرواز تنگ میشد، دوتایی بیرون میرفتیم و چرخی دور فرودگاه با مانور نشستن و بلند شدن مجدد میزدیم.
ما همچنین سفرهای طولانی نیز با هم داشتیم. برای آن سفرها ما همیشه نقشه ای از مسیر که پدر زودتر ترسیم کرده بود داشتیم. وظیفهی ما بچهها این بود که تا با نگاه کردن به نشانههای مسیر زیرمان به مسیریابی کمک کنیم تا بتوانیم مطمئن بمانیم که در مسیر قرار داریم. این برای ما تفریح فوق العاده ای بود چرا که شناسایی اشیا با آن فاصله زیاد کار شناسایی آنها را سخت میکرد. در واقع من مطمئن بودم که پدرم همیشه میدانست الان کجا هستیم. او تجهیزات زیادی روی داشبورد خود داشت و برای کار با آنها گواهینامه گرفته بود.
منظره از هوا واقعا دیدگاه من را تغییر داد. گهگاه من و پدرم بر روی خونه در حومه شهر پرواز میکنیم. از چند صد پا بالاتر، دیدی از خانه به من میدهد که قبل از آن نداشتم. وقتی که پدر از روی خانه میگذشت، مادرم و خواهر هایم به سمت حیاط میدویند و دست برایمان تکان میدادند. من میدانستم که آنها چه کسانی هستند با این که نمیتوانستم در چشم هایشان نگاه کنم. ما نمیتوانستیم صحبت کنیم. حتی اگر از پنجره هواپیما هم فریاد میزدم احتمالا کسی صدای من را هم نمیشنید. من میتوانستم نرده هایی که ملک ما را از جاده جدا کرده بودند را ببینم. و حیاط بزرگی آن جا بود که تابستان با ماشین چمن زنی بر روی آن دوری میزدم. از آسمان من فقط دریای سبز میدیدم نه تیغههای ماشین چمن زنی را.
من عاشق آن لحظاتی بودم که در آسمان بودم. اینها خاطراتی بودند که در ذهنم حک شده اند. به همان اندازه که آن عاشق آن پروازها بودم، مطمئنا جایگزینی برای بودن روی زمین وجود نداشت و همان اندازه که برایم با حال بودند ولی آن فرود آمدنها و تیکاف کردنها خیلی کوتاه بودند تا احساس روی زمین بودن بهم دست دهد.
کار کردن به صورت (Domain-Driven Design (DDD مثل پرواز کردن برای یک تازه کار به نظر میرسد. منظره از آسمان حیرت انگیز است؛ اما گاهی اوقات بعضی چیزها آن قدر نا آشنا به نظر میآیند که برای گم کردن راه کافی است. در واقعیت رفتن از نقطهی A به نقطهی b خیلی دور به نظر میرسد. بزرگترهای DDD به نظر میرسید که همیشه میدانند که کجا هستند. آنها از مدتها پیش، نقشه ای را طرح ریزی کرده اند و کاملا با تجهیزات جهت یابی خود در تماس هستند. خیلیهای دیگر احساس میکنند که فرود نیامدند. چیزی که احتیاج هست، توانایی فرود آمدن است. در آخر هم احتیاج به یک نقشه داریم که ببینیم به کجا هستیم و کجا باید برویم.
در کتاب Implementing Domain-Driven Design به شما کمک میکنم تا DDD را پیاده سازی کنید و مثالهای زیادی با استفاده از ابزارها و تکنولوژیها آشنا ارائه داده شده است. در ادامه شما در مورد معماریها و الگوهای جایگزین برای یکپارچه کردن چندین مدل دامنه توضیح داده شده است تا شما بتوانید از آنها استفاده کنید.
Implementing Domain-Driven Design presents a top-down approach to understanding domain-driven design (DDD) in a way that fluently connects strategic patterns to fundamental tactical programming tools. Vaughn Vernon couples guided approaches to implementation with modern architectures, highlighting the importance and value of focusing on the business domain while balancing technical considerations.
Building on Eric Evans’ seminal book, Domain-Driven Design, the author presents practical DDD techniques through examples from familiar domains. Each principle is backed up by realistic Java examples–all applicable to C# developers–and all content is tied together by a single case study: the delivery of a large-scale Scrum-based SaaS system for a multitenant environment.
The author takes you far beyond “DDD-lite” approaches that embrace DDD solely as a technical toolset, and shows you how to fully leverage DDD’s “strategic design patterns” using Bounded Context, Context Maps, and the Ubiquitous Language. Using these techniques and examples, you can reduce time to market and improve quality, as you build software that is more flexible, more scalable, and more tightly aligned to business goals.
Coverage includes
Getting started the right way with DDD, so you can rapidly gain value from it
Using DDD within diverse architectures, including Hexagonal, SOA, REST, CQRS, Event-Driven, and Fabric/Grid-Based
Appropriately designing and applying Entities–and learning when to use Value Objects instead
Mastering DDD’s powerful new Domain Events technique
Designing Repositories for ORM, NoSQL, and other databases
Table of Contents
Chapter 1 Getting Started with DDD
Chapter 2 Domains, Subdomains, and Bounded Contexts
Chapter 3 Context Maps
Chapter 4 Architecture
Chapter 5 Entities
Chapter 6 Value Objects
Chapter 7 Services
Chapter 8 Domain Events
Chapter 9 Modules
Chapter 10 Aggregates
Chapter 11 Factories
Chapter 12 Repositories
Chapter 13 Integrating Bounded Contexts
Chapter 14 Application