Engineering the Future of Software
Feb 3–4, 2019: Training
Feb 4–6, 2019: Tutorials & Conference
New York, NY

Domain-driven design and event-driven microservices (Day 2)

Matt Stine (Pivotal)
Location: Concourse A
Average rating: ***..
(3.75, 4 ratings)

New architectural paradigms like microservices and evolutionary architecture, as well as the challenges associated with managing data and transactional contexts in distributed systems, have generated a renewed interest in disciplined software design and modular decomposition strategies. We know that the secret to obtaining the benefits of these architectures is getting the boundaries right, both at the team and the component/service level, and then keeping them right as the software continues to evolve! Fortunately, there is a mature, battle-tested approach to domain modeling and system decomposition that is a perfect compliment to these architectures: Domain-Driven Design (DDD). In this course, we’ll leverage an exemplar business domain, that of a pizza delivery store, to illustrate DDD-based decomposition strategies, data architecture patterns, and implementations.


Class Introduction (10 minutes)

* Intro to the Course

* Intro to the Instructor

* Class Logistics

* Class Outline

Lecture: Why do we need DDD

Lecture: What is Ubiquitous Language and why is it so important?

Open Q&A and Class Discussion: Why DDD / Ubiquitous Language

Lecture: DDD 101 – Strategic Design: Bounded Contexts, Context Mapping, Subdomains (30 minutes)

Open Q&A and Class Discussion: Strategic Design 

Lecture: DDD 101 – Tactical Design: Aggregates, Entities, Value Objects, Domain Events, Application Services, Domain Services (30 minutes)

Open Q&A and Class Discussion: Tactical Design 

Lecture: Overview of Event Storming 

Lecture: Introduction to the Pizza Shop domain 

Open Q&A and Class Discussion: Event Storming and Pizza Shop Domain (10 minutes)

Group Activity: Event Storming Kata (90 minutes)

Afternoon Break (30 minutes)

Lecture: Discuss how Event Storm concepts translate into DDD concepts, User Stories, and TDD code (30 minutes)

Lecture: DDD and Technical Architectures (45 minutes)

Open Q&A and Class Discussion: Day One AMA 


Day Two:

Day One Recap 

Lecture: Intro to Evolutionary Architectures and Fitness Functions 

Lecture: The App Continuum 

Lecture: Overview of the Pizza Shop Coding Exercise Environment 

Open Q&A and Class Discussion: Evolutionary Architecture / App Continuum 

Student Activity: Lab 1: TDD Aggregate Root – Create Kitchen Commands with Business Logic and Invariants

Lecture: Lab 1 Solution

Student Activity: Lab 2: TDD Aggregate Root – Create and Publish Kitchen Domain Events

Lecture: Lab 2 Solution (10 minutes)

Student Activity: Lab 3: TDD Aggregate Repository – Create Kitchen Repositories and Add Domain Events 

Lecture: Lab 3 Solution 

Student Activity: Lab 4: TDD Aggregate Repository – Rehydrate Kitchen Aggregates by Reference 

Lecture: Lab 4 Solution 

Student Activity: Lab 5: TDD Application Service – Expose Kitchen Business Interface and Implement Transactions 

Lecture:Lab 5 Solution 

Student Activity: Lab 6: TDD Policy – Subscribe to a Kitchen Domain Event from within an Aggregate and Create CQRS View 

Lecture: Lab 6 Solution 

Student Activity: Lab 7: TDD Policy – Subscribe to a Kitchen Domain Event from an Adjacent Aggregate and Update State 

Lecture: Lab 7 Solution 

Student Activity: Lab 8: Evolutionary Refactoring – Move from Packages to Components, Externalize Persistence

Lecture: Lab 8 Solution

Student Activity: Lab 9: Evolutionary Refactoring – Move from Components to Microservices, Externalize Eventing

Lecture: Lab 9 Solution


Photo of Matt Stine

Matt Stine


Matt Stine is the global CTO for architecture at Pivotal, where he spends much of his time helping customers develop cloud native application architectures. Matt is an 18-year veteran of the enterprise IT industry, 8 of them spent as consulting solutions architect for multiple Fortune 500 companies and the not-for-profit St. Jude Children’s Research Hospital. He is the author of Migrating to Cloud-Native Application Architectures (O’Reilly) and the host of the Software Architecture Radio podcast. Matt is obsessed with the idea that enterprise IT doesn’t have to suck. He focuses on Lean/Agile software development methodologies; DevOps; architectural principles, patterns, and practices; and programming paradigms in an attempt to find the perfect storm of techniques that will allow corporate IT departments to function like startups and create software that delights users while maintaining a high degree of conceptual integrity. Matt has spoken at conferences ranging from JavaOne to OSCON to YOW! and is an eight-year member of the No Fluff Just Stuff tour. Matt is also the founder and past president of the Memphis Java User Group.