Contents

Preface

Acknowledgments

About the Author

Chapter 1 DDD for Me

Will DDD Hurt?

Good, Bad, and Effective Design

Strategic Design

Tactical Design

The Learning Process and Refining Knowledge

Let’s Get Started!

Chapter 2 Strategic Design with Bounded Contexts and the Ubiquitous Language

Domain Experts and Business Drivers

Case Study

Fundamental Strategic Design Needed

Challenge and Unify

Developing a Ubiquitous Language

Putting Scenarios to Work

What about the Long Haul?

Architecture

Summary

Chapter 3 Strategic Design with Subdomains

What Is a Subdomain?

Types of Subdomains

Dealing with Complexity

Summary

Chapter 4 Strategic Design with Context Mapping

Kinds of Mappings

Partnership

Shared Kernel

Customer-Supplier

Conformist

Anticorruption Layer

Open Host Service

Published Language

Separate Ways

Big Ball of Mud

Making Good Use of Context Mapping

RPC with SOAP

RESTful HTTP

Messaging

An Example in Context Mapping

Summary

Chapter 5 Tactical Design with Aggregates

Why Used

Aggregate Rules of Thumb

Rule 1: Protect Business Invariants inside Aggregate Boundaries

Rule 2: Design Small Aggregates

Rule 3: Reference Other Aggregates by Identity Only

Rule 4: Update Other Aggregates Using Eventual Consistency

Modeling Aggregates

Choose Your Abstractions Carefully

Right-Sizing Aggregates

Testable Units

Summary

Chapter 6 Tactical Design with Domain Events

Designing, Implementing, and Using Domain Events

Event Sourcing

Summary

Chapter 7 Acceleration and Management Tools

Event Storming

Other Tools

Managing DDD on an Agile Project

First Things First

Use SWOT Analysis

Modeling Spikes and Modeling Debt

Identifying Tasks and Estimating Effort

Timeboxed Modeling

How to Implement

Interacting with Domain Experts

Summary

References

Index