Practical advice for teams implementing the development philosophy of Domain-Driven Design. With code examples in C# .NET.

Inspired by the seminal works of Eric Evans (Domain-Driven design) and Greg Young (Events) along with the ground breaking work by software craftsmen such as Martin Fowler, Udi Dahan (NServiceBus) and Ayende (Hibernating Rhinos) you will learn how to leverage the design philosophy Domain-Driven Design. Following hands on, real world practical advice you will see how to apply the principles, practices and patterns of DDD.

Part I The Principles and Practices of Domain-Driven Design

Part I of this book is an introduction to the principles and practices of Domain-Driven Design. It's heavy on the prose and light on the code samples. If you already have a good grounding in the philosophy then you can skip this part and go straight to the code in part II.

  • Chapter 1: The opening section of the book introduces you to the philosophy of DDD. You will learn why DDD is needed when dealing with the creation of large complex systems and how it can help you to avoid an unmanageable code base. Introduction to the philosophy of Domain-Driven Design. The problem of blurred responsibilities in code resulting in the Big Ball of Mud. What Domain-Driven Design is and how it can be used to simplify the development of complex business systems.

  • Chapter 2: Distilling the problem space to reveal what is core. Understanding the importance of identifying the Core, Supporting and Generic Domains in your business.

  • Chapter 3: The importance of the collaboration with Domain Experts to gain domain knowledge is discussed next. Domain knowledge will enable you to understand the most important areas of the application you are creating and where to spend the most time and effort. Collaborating with Domain Experts to gain domain knowledge. Driving development of complex Core Domains with Model Driven Design.

  • Chapter 4: The benefit of creating a shared Ubiquitous Language is then explored. The idea of a shared language is core to DDD and underpins the philosophy. A language describing the terms and concepts of the domain, which is created by both the development team and the business experts, is vital to aid communication on complex systems. The benefit of creating a shared Ubiquitous Language in order to describe the terms and concepts in the domain.

  • Chapter 5: The Domain Model.

  • Chapter 6: Context. Strategic coding patterns designed to protect the integrity of core parts of the domain are presented after knowledge of the domain is gained along with patterns to aid team working. Protecting the integrity of core parts of the domain.

  • Chapter 7: Context Mapping. Understanding the relationships between different contexts in an application.

  • Chapter 8: Application Architecture. Learn that architectural design patterns such as CQRS, Layered Design, CRUD and Transaction Script should be applied only within a Bounded Context and not holistically to a system.

  • Chapter 9: Common problems. The last section of part I describes when not to use Domain-Driven Design, and why it's just as important as knowing how to implement it. Simple systems require straight forward solutions. The end of this part looks at why applying DDD to simple problems can lead to overdesigned systems and needless complexity. When not to use Domain-Driven Design.

  • Chapter 10: Getting Started with Domain-Driven Design.

This book is a working draft copy of the Wrox Book Principles, Patterns and Practices of Domain-Driven Design by Scott Millett. Parts II and III are available in the full text.

**Part II **Strategic Patterns of Domain-Driven Design: Bounded Context Integration

Part II shows you how to integrate bounded contexts. Details on the options open for architecting Bounded Contexts. Code examples detailing how to integrate with legacy applications. Techniques for communicating across Bounded Contexts.

  • Chapter 11: Application Composition: Integrating Bounded Contexts
  • Chapter 12: Integrating Via Messaging
  • Chapter 13: Integrating Via An Open Host
  • Chapter 14: Integrating with legacy Contexts

Part II is available in the Wrox Book Principles, Patterns and Practices of Domain-Driven Design by Scott Millett.

Part III Tactical Patterns of Domain-Driven Design: Building Effective Domain Models

Part III focuses on the implementation of the tactical patterns of Domain-Driven Design and how to create an effective domain model. I show you implementations of the patterns contained within Eric's book along with some best practices to aid you with Model-Driven Design.

  • Chapter 15: Introducing the Domain Model Building Blocks
  • Chapter 16: Entities
  • Chapter 17: Value Objects
  • Chapter 18: Domain Services
  • Chapter 19: Aggregates
  • Chapter 20: Domain Events
  • Chapter 21: Factories
  • Chapter 22: Repositories
  • Chapter 23: Event Sourcing

Part III is available in the Wrox Book Principles, Patterns and Practices of Domain-Driven Design by Scott Millett.

**Part IV Design **Patterns For Effective Applications

Part IV focuses on how to architect bounded contexts from an application view.

  • Chapter 24: Composing Applications
  • Chapter 25: CQRS An Architecture of A Bounded Context
  • Chapter 26: Commands: Application Service Patterns for processing Business Use Cases
  • Chapter 27: Queries: Domain Reporting

Part IV is available in the Wrox Book Principles, Patterns and Practices of Domain-Driven Design by Scott Millett.

Scott Millett

Scott Millett is an ASP.NET MVP and lead architect for, an e-commerce company that uses ASP.NET.