Vaughn Vernon's Implementing DDD - Domain Driven Design Workshop

Topics covered at IDDD-01-03

Dates coming soon

Vaughn Vernon's IDDD Workshop is a hands-on class that has been custom developed for mid-level and senior software developers and architects. As a student, you will receive advanced software design instruction and solve real-world design problems as you learn together with others.

Receive a free ticket to the DDD eXchange in New York on September 29th when you book on this course. DDD eXchange link

The class encourages you to share your own problems and gain experience from class interaction. Problem spaces used in exercises include a Scrum-based Project Management application within a SaaS environment, and a Stock Trading system that supports algorithmic trading.

Since it’s birth, Domain Driven Design has been an approach to tackle the complex needs of software projects. In the just over ten years and the maturity of subject has led to some fantastic resources on implementing DDD.

If you and your engineering team are looking to implement Domain Driven Design into your next project, this course is the perfect course to learn through hands-on examples and exercises.

Learn how to:

Gain an in-depth understanding of the strategic and tactical patterns of DDD and how you and your team can collaborate to effectively implement Domain Driven Design in your work projects.

What the community says

"The book [that this course is based on] is a must-read for anybody looking to put DDD into practice."

Udi Dahan, Founder of NServiceBus

"Implementing Domain-Driven Design does a remarkable thing: it takes a sophisticated and substantial topic area in DDD and presents it clearly, with nuance, fun and finesse....I will be referring back to it, and recommending it, often."

Paul Rayner, Principal Consultant & Owner, Virtual Genius, LLC., DDD Instructor, Certified by Eric E

"Vaughn did an excellent job in closing the gap between theory and practice with a complete implementation reference."

Alberto Brandolini, DDD Instructor, Certified by Eric Evans and Domain Language, Inc.

"With Implementing Domain-Driven Design , Vaughn has made an important contribution not only to the literature of the Domain-Driven Design community, but also to the literature of the broader enterprise application architecture field."

Randy Stafford, Architect-at-large, Oracle Coherence Product Development

About the Author

Vaughn Vernon

Vaughn is a veteran software craftsman, with more than 25 years of experience in software design, development, and architecture. He is a thought leader in simplifying software design and implementation using innovative methods.

Day 1: Getting Started, Strategic Design, and Architecture

Getting Started with DDD

Understand the essence of DDD. Form the right mentality for powerful software modeling. Develop a Ubiquitous Language for your project. Learn how to use a test-first approach to craft intention-revealing interfaces. All this lays a foundation for moving forward with DDD.

Domains, Subdomains, and Bounded Contexts

Grasp the core concepts of DDD strategic modeling, and put them to use. Learn to vigorously gather core concepts and separate irrelevant ones. Learn why strategic design is so essential. Develop the ability to determine when your domain models are composed correctly and when they required more rigorous design.

Context Mapping

Learn how to integrate with other systems using DDD and straightforward design techniques. Context Maps are not just drawings. Use them as a project thinking, learning, planning, and integration tool.

Architectures that Support DDD

See how seven architecture styles and patterns can be used to support your DDD projects. We will look at the following: Layers; Dependency Inversion Principle; Hexagonal; SOA; REST; CQRS; Event-Driven Architecture for Pipes and Filters, Long-Running Processes, and Event Sourcing; Actor Model.

Day 2: Tactical Design


There will almost always be at least some Entities in your domain models because of the need to manage change over the life cycle of mutable objects. Understand how to properly employ this necessary modeling tool, but also why you should use these less often than you may think. Rather than overusing Entities, learn how to best use them only when a domain concept must change over time.

Value Objects

Embrace this invaluable, functional modeling tool, which you should use as often as possible. You will learn the Value Object characteristics and why using Values where possible is a safer way to design. Using a test-first approach you will learn by modeling several different concepts as Values.


Demystify effective aggregate designs with the use of a set of simple rules. Learn how to design objects for correct transactional consistency, performance, and high scalability.

Domain Services

Add powerful stateless operations to your model when its use is appropriate. The modeling techniques cover both domain-specific services and those of a more technical nature, often used for integration.

Domain Events

Learn how to model, publish, and consume the facts of what happened in a domain model. You will see how Domain Events have far reaching impact on your designs across the enterprise. Here you will gain an understanding of how to publish and consume Events using both REST and messaging.


Understand the importance of and techniques for organizing concepts within a single domain model. Why go to all the trouble to carefully craft domain objects but without proper modularization using your Ubiquitous Language?


See when and how to use factories to support the creation of domain objects.

Day 3: Aggregate Persistence, Integrating Bounded Contexts, Application

Repositories and Event Sourcing

Consider two primary approaches to persisting and reconstituting your domain objects. You will see how to persist and retrieve your aggregates using both SQL and NoSQL databases. Examples include those for O-R Mapping, Grid, and MongoDB.

Integrating Bounded Contexts

Employ RPC, REST, and messaging to realize your Context Maps in code as you integrate multiple Bounded Contexts of enterprise applications. Understand the complexities and challenges of distributed computing environments, and how to deal with them. An important lesson that is reemphasized is to model each Bounded Context cleanly and separately from those with which you integrate.


Learn how the components that surround your domain model comprise a whole application. Consideration is given to User Interface strategies and the Application Programming Interface (API) using Application Services.


If you want to learn how to succeed with Domain-Driven Design by improving skills and depth of knowledge in a fast-paced industry, then this course is for you.


Participants should have experience programming professionally. This course is not language specific, however examples will be shown in Java.

Bring your own hardware

Important! You are requested to bring your own laptop for this course, to learn how to develop within your own environment. If you are unable to bring a laptop for this course, please contact our community team on +44 207 183 9040 or email us.