About the Book
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.
About the Author
Scott Millett works in London, England, for Wiggle.co.uk, an e-commerce company specializing in cycle and triathlete sports. He has been working with .NET since version 1.0 and was awarded the ASP.NET MVP in 2010 and again in 2011.
Table of Contents: Introduction
Part I: The Principles and Practices of Domain]Driven Design
Chapter 1: What Is Domain]Driven Design?
·The Challenges of Creating Software for Complex Problem Domains
·How the Patterns of Domain]Driven Design Manage Complexity
·The Practices and Principles of Domain]Driven Design
·Popular Misconceptions of Domain]Driven Design
·The Salient Points
Chapter 2: Distilling The Problem Domain
·Knowledge Crunching and Collaboration
·Gaining Domain Insight with Domain Experts
·Patterns for Effective Knowledge Crunching
·Look For Existing Models
·The Salient Points
Chapter 3: Focusing On The Core Domain
·Why Decompose a Problem Domain?
·How to Capture the Essence of the Problem
·How to Focus on the Core Problem
·Treat Your Core Domain as a Product Rather than a Project
·How Subdomains Shape a Solution
·Not All Parts of a System will be Well Designed
·What if You Have no Core Domain?
·The Salient Points
Chapter 4: Model]Driven Design
·What Is a Domain Model?
·Model]Driven Design
·Using a Ubiquitous Language to Bind the Analysis to the Code Model
·Collaborating on a Ubiquitous Language
·How to Create Effective Domain Models
·When to Apply Model]Driven Design
·The Salient Points
Chapter 5: Domain Model Implementation Patterns
·The Domain Layer
·Domain Model Implementation Patterns
·The Salient Points
Chapter 6: Maintaining The Integrity Of Domain Models With Bounded Contexts
·The Challenges of a Single Model
·Use Bounded Contexts to Divide and Conquer a Large Model
·Implementing Bounded Contexts
·The Salient Points
Chapter 7: Context Mapping
·A Reality Map 92
·Recognizing the Relationships between Bounded Contexts
·Communicating the Context Map
·The Strategic Importance of Context Maps
·The Salient Points
Chapter 8: Application Architecture
·Application Architecture
·Application Services
·Application Clients
·The Salient Points
Chapter 9: Common Problems For Teams Starting Out With Domain]Driven Design
·Overemphasizing the Importance of Tactical Patterns
·Missing the Real Value of DDD: Collaboration, Communication and Context
·Producing a Big Ball of Mud Due to Underestimating the Importance of Context
·Causing Ambiguity and Misinterpretations by Failing to Create a UL
·Designing Technical]Focused Solutions Due to a Lack of Collaboration
·Spending Too Much Time on What's Not Important
·Making Simple Problems Complex
·Underestimating the Cost of Applying DDD
·The Salient Points
Chapter 10: Applying The Principles, Practices and Patterns of DDD
·Selling DDD
·Applying the Principles of DDD
·Exploration and Experimentation
·Making the Implicit Explicit
·A Problem Solver First, A Technologist Second
·How Do I Know That I Am Doing It Right?
·The Salient Points
Part II: Strategic Patterns: Communicating Between Bounded Contexts
Chapter 11: Introduction To Bounded Context Integration
·How to Integrate Bounded Contexts
·Integrating Distributed Bounded Contexts
·The Challenges of DDD with Distributed Systems
·SOA and Reactive DDD
·The Salient Points
Chapter 12: Integrating Via Messaging
·Messaging Fundamentals
·Building an E]Commerce Application with NServiceBus
·Maintaining a Messaging Application
·Integrating a Bounded Context with Mass Transit
·The Salient Points
Chapter 13: Integrating Via Http With RPC and Rest
·Why Prefer HTTP?
·RPC
·REST
·The Salient Points
Part III: Tactical Patterns: Creating Effective Domain Models
Chapter 14: Introducing The Domain Modeling Building Blocks
·Tactical Patterns
·Patterns to Model Your Domain
·Lifecycle Patterns
·Emerging Patterns
·The Salient Points
Chapter 15: Value Objects
·When to Use a Value Object
·Defining Characteristics
·Common Modeling Patterns
·Persistence
·The Salient Points
Chapter 16: Entities
·Understanding Entities
·Implementing Entities
·Common Entity Modeling Principles and Patterns
·The Salient Points
Chapter 17: Domain Services
·Understanding Domain Services
·Utilizing Domain Services
·The Salient Points
Chapter 18: Domain Events
·Essence of the Domain Events Pattern
·Event Handling Actions
·Domain Events' Implementation Patterns
·Testing Domain Events
·The Salient Points
Chapter 19: Aggregates
·Managing Complex Object Graphs
·Aggregates
·Defining Aggregate Boundaries
·Implementing Aggregates
·The Salient Points
Chapter 20: Factories
·The Role of a Factory
·The Salient Points
Chapter 21: Repositories
·Repositories
·A Misunderstood Pattern
·Aggregate Persistence Strategies
·A Repository Is an Explicit Contract
·Transaction Management and Units of Work
·To Save or Not To Save
·The Repository as an Anticorruption Layer
·Other Responsibilities of a Repository
·Repository Antipatterns
·Repository Implementations
·The Salient Points
Chapter 22: Event Sourcing
·The Limitations of Storing State as a Snapshot
·Gaining Competitive Advantage by Storing State as a Stream of Events
·Event]Sourced Aggregates
·Building an Event Store
·Using the Purpose]Built Event Store
·CQRS with Event Sourcing
·Recapping the Benefits of Event Sourcing
·Weighing the Costs of Event Sourcing
·Additional Learning Resources
·The Salient Points
Part IV: Design Patterns For Effective Applications
Chapter 23: Architecting Application User Interfaces
·Design Considerations
·Example 1: An HTML API]Based, Server]Side UI for Nondistributed Bounded Contexts
·Example 2: A Data API]Based, Client]Side UI for Distributed Bounded Contexts
·The Salient Points
Chapter 24: CQRS: An Architecture of A Bounded Context
·The Challenges of Maintaining a Single Model for Two Contexts
·A Better Architecture for Complex Bounded Contexts
·The Command Side: Business Tasks
·The Query Side: Domain Reporting
·The Misconceptions of CQRS
·Patterns to Enable Your Application to Scale
·The Salient Points
Chapter 25: Commands: Application Service Patterns for Processing Business Use Cases
·Differentiating Application Logic and Domain Logic
·Application Service Patterns
·Testing Application Services
·The Salient Points
Chapter 26: Queries: Domain Reporting
·Domain Reporting within a Bounded Context
·Domain Reporting Across Bounded Contexts
·The Salient Points
Index