Eric Evans,世界著名軟件建模專家,創(chuàng)建了Domain Language公司,致力于幫助公司機構(gòu)創(chuàng)建與業(yè)務(wù)緊密相關(guān)的軟件。他在全球各地宣講領(lǐng)域驅(qū)動設(shè)計的思想,開設(shè)課程、參加會議、接受專訪,擁有大批的追隨者。從20世紀(jì)80年代開始,他就以設(shè)計師和程序員的雙重身份參與過許多大型面向?qū)ο笙到y(tǒng)的設(shè)計和開發(fā),涉及各種復(fù)雜的業(yè)務(wù)和技術(shù)領(lǐng)域。同時,他還培訓(xùn)和指導(dǎo)過許多開發(fā)團隊開展極限編程實踐。
圖書目錄
Part I Putting the Domain Model to Work 1 Chapter 1: Crunching Knowledge 7 Ingredients of Effective Modeling 12 Knowledge Crunching 13 Continuous Learning 15 Knowledge-Rich Design 17 Deep Models 20 Chapter 2: Communication and the Use of Language 23 UBIQUITOUS LANGUAGE 24 Modeling Out Loud 30 One Team, One Language 32 Documents and Diagrams 35 Written Design Documents 37 Executable Bedrock 40 Explanatory Models 41 Chapter 3: Binding Model and Implementation 45 MODEL-DRIVEN DESIGN 47 Modeling Paradigms and Tool Support 50 Letting the Bones Show: Why Models Matter to Users 57 HANDS-ON MODELERS 60 Part II The Building Blocks of a Model-Driven Design 63 Chapter 4: Isolating the Domain 67 LAYERED ARCHITECTURE 68 Relating the Layers 72 Architectural Frameworks 74 The Domain Layer Is Where the Model Lives 75 THE SMART UI “ANTI-PATTERN” 76 Other Kinds of Isolation 79 Chapter 5: A Model Expressed in Software 81 Associations 82 ENTITIES (A.K.A. REFERENCE OBJECTS) 89 Modeling ENTITIES 93 Designing the Identity Operation 94 VALUE OBJECTS 97 Designing VALUE OBJECTS 99 Designing Associations That Involve VALUE OBJECTS 102 SERVICES 104 SERVICES and the Isolated Domain Layer 106 Granularity 108 Access to SERVICES 108 MODULES (A.K.A. PACKAGES) 109 Agile MODULES 111 The Pitfalls of Infrastructure-Driven Packaging 112 Modeling Paradigms 116 Why the Object Paradigm Predominates 116 Nonobjects in an Object World 119 Sticking with MODEL-DRIVEN DESIGN When Mixing Paradigms 120 Chapter 6: The Life Cycle of a Domain Object 123 AGGREGATES 125 FACTORIES 136 Choosing FACTORIES and Their Sites 139 When a Constructor Is All You Need 141 Designing the Interface 143 Where Does Invariant Logic Go? 144 ENTITY FACTORIES Versus VALUE OBJECT FACTORIES 144 Reconstituting Stored Objects 145 REPOSITORIES 147 Querying a REPOSITORY 152 Client Code Ignores REPOSITORY Implementation; Developers Do Not 154 Implementing a REPOSITORY 155 Working Within Your Frameworks 156 The Relationship with FACTORIES 157 Designing Objects for Relational Databases 159 Chapter 7: Using the Language: An Extended Example 163 Introducing the Cargo Shipping System 163 Isolating the Domain: Introducing the Applications 166 Distinguishing ENTITIES and VALUE OBJECTS 167 Role and Other Attributes 168 Designing Associations in the Shipping Domain 169 AGGREGATE Boundaries 170 Selecting REPOSITORIES 172 Walking Through Scenarios 173 Sample Application Feature: Changing the Destination of a Cargo 173 Sample Application Feature: Repeat Business 173 Object Creation 174 FACTORIES and Constructors for Cargo 174 Adding a Handling Event 175 Pause for Refactoring: An Alternative Design of the Cargo AGGREGATE 177 MODULES in the Shipping Model 179 Introducing a New Feature: Allocation Checking 181 Connecting the Two Systems 182 Enhancing the Model: Segmenting the Business 183 Performance Tuning 185 A Final Look 186 Part III Refactoring Toward Deeper Insight 187 Chapter 8: Breakthrough 193 Story of a Breakthrough 194 A Decent Model, and Yet . . . 194 The Breakthrough 196 A Deeper Model 198 A Sobering Decision 199 The Payoff 200 Opportunities 201 Focus on Basics 201 Epilogue: A Cascade of New Insights 202 Chapter 9: Making Implicit Concepts Explicit 205 Digging Out Concepts 206 Listen to Language 206 Scrutinize Awkwardness 210 Contemplate Contradictions 216 Read the Book 217 Try, Try Again 219 How to Model Less Obvious Kinds of Concepts 219 Explicit Constraints 220 Processes as Domain Objects 222 SPECIFICATION 224 Applying and Implementing SPECIFICATION 227 Chapter 10: Supple Design 243 INTENTION-REVEALING INTERFACES 246 SIDE-EFFECT-FREE FUNCTIONS 250 ASSERTIONS 255 CONCEPTUAL CONTOURS 260 STANDALONE CLASSES 265 CLOSURE OF OPERATIONS 268 Declarative Design 270 Domain-Specific Languages 272 A Declarative Style of Design 273 Extending SPECIFICATIONS in a Declarative Style 273 Angles of Attack 282 Carve Off Subdomains 283 Draw on Established Formalisms, When You Can 283 Chapter 11: Applying Analysis Patterns 293 Chapter 12: Relating Design Patterns to the Model 309 STRATEGY (A.K.A. POLICY) 311 COMPOSITE 315 Why Not FLYWEIGHT? 320 Chapter 13: Refactoring Toward Deeper Insight 321 Initiation 321 Exploration Teams 322 Prior Art 323 A Design for Developers 324 Timing 324 Crisis as Opportunity 325 Part IV Strategic Design 327 Chapter 14: Maintaining Model Integrity 331 BOUNDED CONTEXT 335 Recognizing Splinters Within a BOUNDED CONTEXT 339 CONTINUOUS INTEGRATION 341 CONTEXT MAP 344 Testing at the CONTEXT Boundaries 351 Organizing and Documenting CONTEXT MAPS 351 Relationships Between BOUNDED CONTEXTS 352 SHARED KERNEL 354 CUSTOMER/SUPPLIER DEVELOPMENT TEAMS 356 CONFORMIST 361 ANTICORRUPTION LAYER 364 Designing the Interface of the ANTICORRUPTION LAYER 366 Implementing the ANTICORRUPTION LAYER 366 A Cautionary Tale 370 SEPARATE WAYS 371 OPEN HOST SERVICE 374 PUBLISHED LANGUAGE 375 Unifying an Elephant 378 Choosing Your Model Context Strategy 381 Team Decision or Higher 382 Putting Ourselves in Context 382 Transforming Boundaries 382 Accepting That Which We Cannot Change: Delineating the External Systems 383 Relationships with the External Systems 384 The System Under Design 385 Catering to Special Needs with Distinct Models 386 Deployment 387 The Trade-off 388 When Your Project Is Already Under Way 388 Transformations 389 Merging CONTEXTS: SEPARATE WAYS ? SHARED KERNEL 389 Merging CONTEXTS: SHARED KERNEL ? CONTINUOUS INTEGRATION 391 Phasing Out a Legacy System 393 OPEN HOST SERVICE ? PUBLISHED LANGUAGE 394 Chapter 15: Distillation 397 CORE DOMAIN 400 Choosing the CORE 402 Who Does the Work? 403 An Escalation of Distillations 404 GENERIC SUBDOMAINS 406 Generic Doesn’t Mean Reusable 412 Project Risk Management 413 DOMAIN VISION STATEMENT 415 HIGHLIGHTED CORE 417 The Distillation Document 418 The Flagged CORE 419 The Distillation Document as Process Tool 420 COHESIVE MECHANISMS 422 GENERIC SUBDOMAIN Versus COHESIVE MECHANISM 424 When a MECHANISM Is Part of the CORE DOMAIN 425 Distilling to a Declarative Style 426 SEGREGATED CORE 428 The Costs of Creating a SEGREGATED CORE 429 Evolving Team Decision 430 ABSTRACT CORE 435 Deep Models Distill 436 Choosing Refactoring Targets 437 Chapter 16: Large-Scale Structure 439 EVOLVING ORDER 444 SYSTEM METAPHOR 447 The “Naive Metaphor” and Why We Don’t Need It 448 RESPONSIBILITY LAYERS 450 Choosing Appropriate Layers 460 KNOWLEDGE LEVEL 465 PLUGGABLE COMPONENT FRAMEWORK 475 How Restrictive Should a Structure Be? 480 Refactoring Toward a Fitting Structure 481 Minimalism 481 Communication and Self-Discipline 482 Restructuring Yields Supple Design 482 Distillation Lightens the Load 483 Chapter 17: Bringing the Strategy Together 485 Combining Large-Scale Structures and BOUNDED CONTEXTS 485 Combining Large-Scale Structures and Distillation 488 Assessment First 490 Who Sets the Strategy? 490 Emergent Structure from Application Development 491 A Customer-Focused Architecture Team 492 Six Essentials for Strategic Design Decision Making 492 The Same Goes for the Technical Frameworks 495 Beware the Master Plan 496 Conclusion 499 Appendix: The Use of Patterns in This Book 507 Glossary 511 References 515 Photo Credits 517 Index 519