Chapter 1: Getting Started with Domain-Driven
What is Domain-Driven Design about? What role does it play in complex systems? Is it
worth learning about and exploring? What are the main concepts a developer needs to
know when jumping into it?
Chapter 2: Architectural Styles
Bounded Contexts can be implemented in different ways and using different approaches.
However, two styles are getting more popular, and they are Hexagonal Architecture and
CQRS + ES. In this chapter, we'll see these two main Architectural Styles, understand what
their main strengths are, and discover when to use them.
Chapter 3: Value Objects
Value Objects are the basic pieces for rich modeling. We'll learn what their properties are
and what makes them so important. We'll figure out how to persist them using Doctrine
and custom ORMs. We'll show how to properly validate and unit test them. And finally,
we'll see what a test case of testing immutability looks like.
Chapter 4: Entities
Entities are Domain-Driven Design building blocks that are uniquely identified and
mutable. We'll see how to create and validate them and how to properly map them using a
custom ORM and Doctrine. We'll also assess whether or not annotations are the best
mapping approach for Entities and look at the different strategies for generating an
Chapter 5: Domain Services
In this chapter, you'll learn about what a Domain Service is and when to use it. We'll review
what Anemic Domain Models and Rich Domain Models are. Lastly, we'll deal with
Infrastructure issues when writing Domain Services.
Chapter 6: Domain-Events
Domain Events are a great Inversion of Control (IoC) mechanism. In Domain-Driven
Design, they're important for communicating different Bounded Contexts asynchronously,
improving your Application performance using eventual consistency, and decoupling your
Application from its Infrastructure.
Chapter 7: Modules
With so many tactical building blocks, it's a bit difficult to know where to place them in
code, especially if you're dealing with a framework like Symfony. We'll review how PHP
namespaces can be used for implementing Modules. We'll also discover different