Domain-Driven Design: Tackling Complexity in the Heart of Software
طراحان برجسته نرم افزار، حداقل بیست سال است که مدل سازی و طراحی دامنه را مباحثی مهم شناخته اند، اما در کمال تعجب چیزهای کمی درباره آنچه که باید انجام شود و یا چگونگی انجام آن نوشته شده است. اگرچه هرگز به روشنی بیان نشده است، فلسفه ای به عنوان جریان پنهانی در جامعه شیء گرا توسعه یافته است که من آن را «طراحی دامنه محور» مینامم.
من یک دهه گذشته را صرف توسعه سیستمهای پیچیده در چندین حوزه تجاری و فنی کرده ام. من بهترین روشها را در فرایند طراحی و توسعه امتحان کرده ام چرا که این روشها را رهبران جامعه توسعه شیء گرا پدید آورده اند. برخی از پروژههای من بسیار موفق بودند؛ چند تایی هم شکست خوردند. ویژگی مشترک تمام موفقیت ها، یک مدل دامنه غنی بود که در طی چرخههای طراحی تکامل یافته بود و به جزئی جدا نشدنی از پروژه تبدیل شده بود. کتاب Domain Driven Design، چارچوبی برای تصمیم گیریهای طراحی و واژگان فنی برای بحث در مورد طراحی دامنه ارائه میدهد. این کتاب ترکیبی از بهترین شیوههای به طور گسترده پذیرفته شده همراه با بینشها و تجربیات خودم است. پروژه هایی که با دامنههای پیچیده روبرو هستند میتوانند از این چارچوب برای دستیابی به طراحی سیستم دامنه محور استفاده کنند.
جامعه توسعه دهندگان نرم افزار به طور گسترده اذعان میکنند که مدل سازی دامنه، قلب طراحی نرم افزار است. در مدل سازی دامنه، توسعه دهندگان نرم افزار قادر خواهند بود که قابلیتها را بیان کنند و این قابلیتها را کاملا به صورت نرم افزاری پیاده سازی کنند تا کاملا نیازهای کاربر را برطرف سازد. با وجود اهمیت موضوع، فقط تعداد کمی منبع کاربردی برای چگونگی قرار دادن مدل سازی دامنه در فرآیند توسعه نرم افزار وجود دارند که این کتاب سعی کرده این نقصان را تا حدی برطرف نماید.
Specific topics covered include:
• Isolating the domain
• Entities, value objects, services, and modules
• The lifecycle of a domain object
• Representing processes as domain objects
• Creating functions free of side effects
• Conceptual contours
• Standalone classes
• Extending specifications
• Applying analysis patterns
• Relating design patterns to the model
• Maintaining model integrity
• Formulating the domain vision statement
• Choosing refactoring targets
• Responsibility layers
• Creating a pluggable component framework
• Bringing together large-scale structures and bounded contexts
Table of Contents:
Chapter One. Crunching Knowledge
Chapter Two. Communication and the Use of Language
Chapter Three. Binding Model and Implementation
Chapter Four. Isolating the Domain
Chapter Five. A Model Expressed in Software
Chapter Six. The Life Cycle of a Domain Object
Chapter Seven. Using the Language: An Extended Example
Chapter Eight. Breakthrough
Chapter Nine. Making Implicit Concepts Explicit
Chapter Ten. Supple Design
Chapter Eleven. Applying Analysis Patterns
Chapter Twelve. Relating Design Patterns to the Model
Chapter Thirteen. Refactoring Toward Deeper Insight
Chapter Fourteen. Maintaining Model Integrity
Chapter Fifteen. Distillation
Chapter Sixteen. Large-Scale Structure
Chapter Seventeen. Bringing the Strategy Together