Preface Why Domain-Driven Design Understanding the problem Problem space and solution space What went wrong with requirements Dealing with complexity Types of complexity Categorizing complexity Decision making and biases Knowledge Domain knowledge Avoiding ignorance Summary Further reading Language and Context Ubiquitous language Domain language Sample application domain Making implicit explicit Domain language for classified ads Language and context Summary EventStorming EventStorming Modeling language Visualization Facilitating an EventStorming workshop Who to invite Preparing the space Materials The room  The workshop Timing and scheduling The beginning During the workshop After the workshop Our first model Summary Further Reading Designing the Model Introduction Domain model What does the model represent Anemic domain model Functional languages and anemic models What to include in the domain model Design considerations CQRS Design-level EventStorming Getting deeper knowledge Preparation for the workshop Extended notation Commands Read models Users Policies All together now Modeling the reference domain Summary Further reading Implementing the Model Introduction Technical requirements Starting up the implementation Creating projects The Framework Transferring the model to code Entities Identities Classified Ad entity Adding behavior Ensuring correctness Constraints for input values Value objects Factories Domain services Entity invariants Domain events in code Domain events as objects Raising events Events change state Summary Acting with Commands Technical requirements Outside the domain model Exposing Web API Public API contracts HTTP endpoints Application layer Command handling Command handler pattern Application service Summary Consistency Boundary Bounded Context Event Sourcing Projections and Queries Integration with Events Setting Things Up Task-Based UI One-Way Flow Refactoring Versioning of Events New Horizons