Patterns, Principles, and Practices of Domain-Driven Design

Sofort lieferbar | Lieferzeit: Sofort lieferbar I
ISBN-13:
9781118714706
Veröffentl:
2015
Erscheinungsdatum:
01.06.2015
Seiten:
746
Autor:
Scott Millett
Gewicht:
1460 g
Format:
236x192x46 mm
Sprache:
Englisch
Beschreibung:

Methods for managing complex software construction following the practices, principles and patterns of Domain-Driven Design with code examples in C#This book presents the philosophy of Domain-Driven Design (DDD) in a down-to-earth and practical manner for experienced developers building applications for complex domains. A focus is placed on the principles and practices of decomposing a complex problem space as well as the implementation patterns and best practices for shaping a maintainable solution space. You will learn how to build effective domain models through the use of tactical patterns and how to retain their integrity by applying the strategic patterns of DDD. Full end-to-end coding examples demonstrate techniques for integrating a decomposed and distributed solution space while coding best practices and patterns advise you on how to architect applications for maintenance and scale.* Offers a thorough introduction to the philosophy of DDD for professional developers* Includes masses of code and examples of concept in action that other books have only covered theoretically* Covers the patterns of CQRS, Messaging, REST, Event Sourcing and Event-Driven Architectures* Also ideal for Java developers who want to better understand the implementation of DDD
INTRODUCTION xxxvPART I: THE PRINCIPLES AND PRACTICES OF DOMAIN-DRIVEN DESIGNCHAPTER 1: WHAT IS DOMAIN-DRIVEN DESIGN? 3The Challenges of Creating Software for Complex Problem Domains 4How the Patterns of Domain-Driven Design Manage Complexity 6The Practices and Principles of Domain-Driven Design 11Popular Misconceptions of Domain-Driven Design 12The Salient Points 13CHAPTER 2: DISTILLING THE PROBLEM DOMAIN 15Knowledge Crunching and Collaboration 15Gaining Domain Insight with Domain Experts 18Patterns for Effective Knowledge Crunching 19Look For Existing Models 24The Salient Points 29CHAPTER 3: FOCUSING ON THE CORE DOMAIN 31Why Decompose a Problem Domain? 31How to Capture the Essence of the Problem 32How to Focus on the Core Problem 33Treat Your Core Domain as a Product Rather than a Project 36How Subdomains Shape a Solution 37Not All Parts of a System will be Well Designed 37What if You Have no Core Domain? 39The Salient Points 40CHAPTER 4: MODEL?]DRIVEN DESIGN 41What Is a Domain Model? 42Model-Driven Design 44Using a Ubiquitous Language to Bind the Analysis to the Code Model 47Collaborating on a Ubiquitous Language 48How to Create Effective Domain Models 52When to Apply Model?]Driven Design 56The Salient Points 57CHAPTER 5: DOMAIN MODEL IMPLEMENTATION PATTERNS 59The Domain Layer 60Domain Model Implementation Patterns 60The Salient Points 71CHAPTER 6: MAINTAINING THE INTEGRITY OF DOMAIN MODELS WITH BOUNDED CONTEXTS 73The Challenges of a Single Model 74Use Bounded Contexts to Divide and Conquer a Large Model 79Implementing Bounded Contexts 85The Salient Points 89CHAPTER 7: CONTEXT MAPPING 91A Reality Map 92Recognising the Relationships between Bounded Contexts 95Communicating the Context Map 100The Strategic Importance of Context Maps 101The Salient Points 103CHAPTER 8: APPLICATION ARCHITECTURE 105Application Architecture 105Application Services 112Application Clients 117The Salient Points 120CHAPTER 9: COMMON PROBLEMS FOR TEAMS STARTING OUT WITH DOMAIN?]DRIVEN DESIGN 121Overemphasizing the Importance of Tactical Patterns 122Missing the Real Value of DDD: Collaboration, Communication, and Context 124Producing a Big Ball of Mud Due to Underestimating the Importance of Context 124Causing Ambiguity and Misinterpretations by Failing to Create a UL 125Designing Technical-Focused Solutions Due to a Lack of Collaboration 125Spending Too Much Time on What's Not Important 126Making Simple Problems Complex 126Underestimating the Cost of Applying DDD 127The Salient Points 130CHAPTER 10: APPLYING THE PRINCIPLES, PRACTICES, AND PATTERNS OF DDD 131Selling DDD 132Applying the Principles of DDD 133Exploration and Experimentation 142Making the Implicit Explicit 143A Problem Solver First, A Technologist Second 146How Do I Know That I Am Doing It Right? 146The Salient Points 147PART II: STRATEGIC PATTERNS: COMMUNICATING BETWEEN BOUNDED CONTEXTSCHAPTER 11: INTRODUCTION TO BOUNDED CONTEXT INTEGRATION 151How to Integrate Bounded Contexts 152Integrating Distributed Bounded Contexts 161The Challenges of DDD with Distributed Systems 165SOA and Reactive DDD 174The Salient Points 180CHAPTER 12: INTEGRATING VIA MESSAGING 181Messaging Fundamentals 182Building an E-Commerce Application with NServiceBus 186Maintaining a Messaging Application 227Integrating a Bounded Context with Mass Transit 235The Salient Points 243CHAPTER 13: INTEGRATING VIA HTTP WITH RPC AND REST 245Why Prefer HTTP? 247RPC 248REST 264The Salient Points 305PART III: TACTICAL PATTERNS: CREATING EFFECTIVE DOMAIN MODELSCHAPTER 14: INTRODUCING THE DOMAIN MODELING BUILDING BLOCKS 309Tactical Patterns 310Patterns to Model Your Domain 310Lifecycle Patterns 318Emerging Patterns 324The Salient Points 327CHAPTER 15: VALUE OBJECTS 329When to Use a Value Object 330Defining Characteristics 333Common Modeling Patterns 345Persistence 351The Salient Points 359CHAPTER 16: ENTITIES 361Understanding Entities 362Implementing Entities 363Common Entity Modeling Principles and Patterns 380The Salient Points 388CHAPTER 17: DOMAIN SERVICES 389Understanding Domain Services 390Utilizing Domain Services 397The Salient Points 403CHAPTER 18: DOMAIN EVENTS 405Essence of the Domain Events Pattern 406Event Handling Actions 409Domain Events' Implementation Patterns 410Testing Domain Events 422The Salient Points 425CHAPTER 19: AGGREGATES 427Managing Complex Object Graphs 428Aggregates 434Defining Aggregate Boundaries 442Implementing Aggregates 450The Salient Points 468CHAPTER 20: FACTORIES 469The Role of a Factory 469The Salient Points 477CHAPTER 21: REPOSITORIES 479Repositories 479A Misunderstood Pattern 481Aggregate Persistence Strategies 486A Repository Is an Explicit Contract 492Transaction Management and Units of Work 493To Save or Not To Save 497The Repository as an Anticorruption Layer 499Other Responsibilities of a Repository 500Repository Antipatterns 506Repository Implementations 508The Salient Points 593CHAPTER 22: EVENT SOURCING 595The Limitations of Storing State as a Snapshot 596Gaining Competitive Advantage by Storing State as a Stream of Events 597Event-Sourced Aggregates 600Building an Event Store 611Using the Purpose-Built Event Store 627CQRS with Event Sourcing 637Recapping the Benefits of Event Sourcing 639Weighing the Costs of Event Sourcing 640Additional Learning Resources 641The Salient Points 641PART IV: DESIGN PATTERNS FOR EFFECTIVE APPLICATIONSCHAPTER 23: ARCHITECTING APPLICATION USER INTERFACES 645Design Considerations 646Example 1: An HTML API-Based, Server-Side UI for Nondistributed Bounded Contexts 651Example 2: A Data API-Based, Client-Side UI for Distributed Bounded Contexts 658The Salient Points 667CHAPTER 24: CQRS: AN ARCHITECTURE OF A BOUNDED CONTEXT 669The Challenges of Maintaining a Single Model for Two Contexts 670A Better Architecture for Complex Bounded Contexts 670The Command Side: Business Tasks 672The Query Side: Domain Reporting 676The Misconceptions of CQRS 679Patterns to Enable Your Application to Scale 680The Salient Points 685CHAPTER 25: COMMANDS: APPLICATION SERVICE PATTERNS FOR PROCESSING BUSINESS USE CASES 687Differentiating Application Logic and Domain Logic 689Application Service Patterns 700Testing Application Services 709The Salient Points 712CHAPTER 26: QUERIES: DOMAIN REPORTING 713Domain Reporting within a Bounded Context 714Domain Reporting Across Bounded Contexts 733The Salient Points 736INDEX 737

Kunden Rezensionen

Zu diesem Artikel ist noch keine Rezension vorhanden.
Helfen sie anderen Besuchern und verfassen Sie selbst eine Rezension.

Google Plus
Powered by Inooga