出版時間:201004 出版社:人民郵電出版社 作者:Eric Evans 頁數(shù):529
Tag標(biāo)簽:無
內(nèi)容概要
領(lǐng)域模型使開發(fā)人員可以表達(dá)豐富的軟件功能需求,由此實現(xiàn)的軟件可以滿足用戶真正的需要,因此被公認(rèn)為是軟件設(shè)計的關(guān)鍵所在,其重要性顯而易見。但講述如何將領(lǐng)域模型用于軟件開發(fā)過程的優(yōu)秀實用資料卻不多見。本書正是這一領(lǐng)域最著名的作品,受到眾多業(yè)界大師的贊美和推介,廣受讀者好評。 要通過創(chuàng)建領(lǐng)域模型來加速復(fù)雜的軟件開發(fā),就需要利用大量最佳實踐和標(biāo)準(zhǔn)模式在開發(fā)團(tuán)隊中形成統(tǒng)一的交流語言;不僅重構(gòu)代碼,而且要重構(gòu)代碼底層的模型;同時采取反復(fù)迭代的敏捷開發(fā)方法,深入理解領(lǐng)域特點,促進(jìn)領(lǐng)域?qū)<遗c程序員的良好溝通。針對這些內(nèi)容,本書結(jié)合真實項目,系統(tǒng)地介紹了領(lǐng)域驅(qū)動開發(fā)的目標(biāo)、意義和方法,充分討論了復(fù)雜系統(tǒng)的建模與設(shè)計問題?! ”緯鴮⒅笇?dǎo)面向?qū)ο箝_發(fā)人員、系統(tǒng)分析人員和設(shè)計人員合理地組織工作,各有側(cè)重、彼此協(xié)作,有條不紊地進(jìn)行復(fù)雜系統(tǒng)的開發(fā),幫助他們建立豐富而實用的領(lǐng)域模型,并由此創(chuàng)建長期適用的優(yōu)質(zhì)軟件。
作者簡介
Eric Evans世界著名軟件建模專家,創(chuàng)建了Domain Language公司,致力于幫助公司機(jī)構(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ā)團(tuán)隊開展極限編程實踐。
書籍目錄
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
章節(jié)摘錄
插圖:(The service asks each Net for assigned Rules(), and then writes them fully expanded.)Of course, if there were only one operation (as in the example), the script-based approach might be just as practical. But in reality, there were 20 or more. The MODEL-DRIVEN DESIGN scales easily and can include constraints on combining rules and other enhancements.The second design also accommodates testing. Its components have well-defined interfaces that can be unit-tested. The only way to test the script is to do an end-to-end file-in/file-out comparison.Keep in mind that such a design does not emerge in a single step. It would take several iterations of refactoring and knowledge crunching to distill the important concepts of the domain into a simple, incisive model.Letting the Bones Show: Why Models Matter to UsersIn theory, perhaps, you could present a user with any view of a system, regardless of what lies beneath. But in practice, a mismatch causes confusion at best——bugs at worst. Consider a very simple example of how users are misled by superimposed models of book- marks for Web sites in current releases of Microsoft Internet Explorer.
媒體關(guān)注與評論
“這本書應(yīng)該出現(xiàn)在每個軟件開發(fā)人員的書架上。” ——KerltBeck 軟件開發(fā)方法學(xué)泰斗。極限編程的創(chuàng)始人“Eric的這本書太棒太神奇了,他準(zhǔn)確地告訴你如何讓軟件設(shè)計滿足你的模型需求本書讀起來趣味無窮。Eric有許多有趣的故事,而且描述起來很有一套它出版后將成為軟件開發(fā)。人員必讀的經(jīng)典之作?!薄 猂alh Johnson 《設(shè)計模式》的作者“如果你認(rèn)為自己在面向?qū)ο缶幊讨械耐顿Y沒有收到回報,那么讀了本書你就會知道自己漏掉了什么?!薄 猈ard Cunningham 設(shè)計模式和敏捷軟件方法的先驅(qū)“Enc Evarls力證作為開發(fā)核心的領(lǐng)域模型的重要性。他搭建了一個穩(wěn)固的框架并提供了一套實現(xiàn)技術(shù)和技巧。這里沉淀下來的是亙古不變的智慧精華,在應(yīng)時的方法論都淪為明日黃花后,它依然光華璀璨?!薄 狣ave Collirls Designing Object-Oriented User Interfaces的作者“Eric完全從實戰(zhàn)者的角度著筆。描述了無處不用的語言、與用戶共享模型的好處、對象生命周期的管理、深度重構(gòu)的過程和結(jié)果。這是對我們這個領(lǐng)域的巨大貢獻(xiàn)?!薄 狶uke Hollmann Beyond Software Architecture的作者
圖書封面
圖書標(biāo)簽Tags
無
評論、評分、閱讀與下載