
The course will teach you all about system building and architectures with Domain Driven Design. The largest problem many run into with Domain Driven Design is in getting the abstract concepts implemented in a concrete way. Many of the stereotypical architectures people use actually make it impossible to apply DDD. Greg's course will help you avoid this by teaching you all about Command Query Separation (CQRS), Domain Events, Event Sourcing and how to effectively apply DDD within an organization.
Learning objectives
- Apply DDD
- Use CQRS
- Understand Domain Events
- Apply Event Sourcing
Agenda
Day 1
- Domain Driven Design Review (Essential to the following two days)
Day 2
- Introduction/Outline
- User intention and why it is important
- Exercise: Building a task based UI
- Command and Query Separation
- Introduction to events as a storage system
- Performance optimizations, snapshots
- Creation of an aggregate root that tracks its own state
- Conext Specifications to capture intent
- How events change testing strategies
Day 3
- The Read System
- Partitionability of work, developer specialization, and outsourcing
- Eventual Consistency
- Organizational Sagas and the Ubiquitous Integration Language
- Versioning of the event log over long periods of time
- Pub/Sub and building disconnected systems
Who should attend?
Architects or Senior Developers with a strong interest in Domain Driven Design and in particular how to use Command Query Separation (CQRS), Domain Events and Event Sourcing.
Prerequisites
You will be expected to bring your own notebook that has installed your own development enviroment so you can develop with your own tools and languages, not with something that you are not familiar with. To get the most out of this course, you are advised to read Eric Evans book on Tackling Complexity in the Heart of Software, prior to attending.
Course Labs & Exercises
This course concentrates on applying DDD. This means that while the concepts will be explained, Greg Young will make sure you focus on creating working (Java/C#) code. We will go through the different concepts with a focus on how you can apply them in your own domain. The group will have a maximum of 16 people attending, to facilitate interaction between course members.

