iddd-workshop

Implementing Domain-Driven Design

How your team can put DDD to use

Intensive, 3-day, hands-on IDDD Workshop by Vaughn Vernon

Go beyond the theory of DDD and see how your team can actually use DDD to accelerate your strategic initiatives in a way that helps you design for the business’ competitive advantage. Emphasis is placed on software development as a craft by embracing software design in source code that works within the framework of agile processes, and de-emphasizes attempts to solve real strategic business software initiatives by throwing technology at the problem. The event is best for senior and mid-level software developers and architects interested in software craftsmanship and learning domain modeling using the Domain-Driven Design (DDD) approach. If your organization is looking for the way forward with Microservices, consider this workshop an essential foundation. This is a hands-on workshop. Students are strongly encouraged to engage in workshop exercises and write source code that includes implementing multiple interacting Microservices, as DDD Bounded Contexts, that are event-driven. You will use DDD strategic and tactical design in your implementations.

day-one-iddd

Getting started, strategic design, and architecture

The goal of Day 1 is for you to get grounded with a DDD mentality that will free your mind from data-driven approaches. This is necessary to grasp the thrust of developing a Ubiquitous Language within a Bounded Context, the hallmark of DDD. From there you will be ready to embrace strategic design using Sub-domains, Bounded Contexts, and Context Maps. Day 1 then crosses over to architecture, preparing you to employ Ports and Adapters, Event-Driven, and other powerful architectural tools as you develop new Bounded Contexts in classroom exercises. Students learn ways to develop a Ubiquitous Language within a Bounded Context, using both Specification by Example and Event Storming. Find your way toward correct software delivery goals using Impact Mapping. Teams of students will use these tools to reach a shared understanding of a Core Domain and Sub-domains. Each team will present their “big picture” and “design level” direction and receive helpful feedback before the Implementation begins in Day 2.

Getting started with DDD

Understand the essence of DDD. Form the right mentality for powerful software modeling. Develop a Ubiquitous Language for your project using the Specification by Example approach and Acceptance Tests. 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 subsystems using DDD and straightforward design techniques. Context Maps are not just drawings. Use them for cross-team communications, project thinking, learning, planning, and as an integration tool.

Architectures that support DDD

See how various architecture styles and patterns can be used to support your DDD projects. We will look at the following: Layers; Dependency Inversion Principle; Hexagonal; Microservices; REST; Event-Driven; Process Management; Event Sourcing and CQRS; Actor Model. Coupled with DDD, these architecture styles and patterns will support your microservices efforts.

Domain Events and Event Storming

Learn to use Domain Events and Event Storming for both “big picture” systems designs and “detail level” tactical designs. Exercises will lead to using and Event-Driven Architecture in Day-2 implementations.

day-two-iddd

Tactical Design

In Day 2 we switch our focus to tactical design, giving you the aptitude to make proper finer-grained modeling decisions within a Core Domain. Whether its the use of Entities, Value Objects, Aggregates,Domain Events, or Domain Services that best fit your specific modeling situation, you can put each of the tactical tools to use in your own Core Domain project. As the day progresses, you will learn the advantages of using each of the tools, and when another tool could provide a better set of trade offs.

Entities

There will likely be at least some Entities in object-oriented 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. You will learn by modeling concepts as Values, and you may even decide to use Value-prolific designs rather than Entities.

Aggregates

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

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 messaging.

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.

Modules

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?

Factories

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

day-3-iddd

Aggregate persistence, integrating bounded contexts, application

During Day 3 we bring all the parts together to form an application. We look at different ways to persist Aggregates using object-relational mapping, document databases, key-value stores, as well as by employing Event Sourcing. We then take a deep dive into applying Context Mapping techniques as we return to strategic design, but this time by developing integration solutions between Core Domains and other Bounded Contexts in your whole-system solution. Finally we give attention to other parts of the application, such as the user interface and querying with CQRS. We also take a look at how to use Applications Services when necessary. With all this background you will be better prepared to move forward with a DDD project of your own, or to make greater strides on your current DDD strategic initiative.

Repositories and Event Sourcing

Consider two primary approaches to persisting and reconstituting your domain objects. You will learn how to persist and retrieve your Aggregates using both SQL and NoSQL databases. You will also learn how to use Event Sourcing as both a persistence approach and to publish Domain Events for broader consumption.

Integrated Bounded Contexts

Employ both 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.

Application

Learn how the components that surround your domain model comprise a whole subsystem application. Consideration is given to User Interface strategies and the Application Programming Interface (API) using Application Services. Here you will learn how to apply CQRS from Domain Events and Event Sourcing.

Learn how to integrate with other subsystems using DDD and straightforward design techniques. Context Maps are not just drawings. Use them for cross-team communications, project thinking, learning, planning, and as an integration tool.

Want to get started?

eddd

Event-Oriented Domain-Driven Design

Using events to deliver core business value

Intensive, 2-day, hands-on DDD workshop by Vaughn Vernon

This intensive, two-day, hands-on workshop teaches you DDD within an explicitly event-oriented microservices business domain. You will learn both strategic and tactical design. This workshop is specially designed for mid-level and senior software developers and architects who are interested in applying event-driven and microservices architectures using DDD. This is a hands-on workshop. Students are strongly encouraged to engage in workshop exercises and write source code that includes implementing multiple interacting Microservices that are event-driven and that use DDD strategic and tactical design.

This hands-on, code-prolific, DDD workshop teaches you the essentials of how to implement using the Domain-Driven Design approach. Students first receive an overview of DDD’s strategic and tactical design, including ways to develop a Ubiquitous Language within a Bounded Context, using both Event Storming and Specification by Example.

Following this, teams of students use these tools to reach a shared understanding of a Core Domain and Subdomains. Each team presents their “big picture” and “design level” direction and receive helpful feedback before the implementation begins. This step leads to a succession of strategic and tactical design learning and implementation steps with either Java or C#. Implementations may use Event Sourcing and traditional domain model persistence. The following will be your takeaways:

  • Essential DDD, with strategic and tactical design, including developing a Ubiquitous Language in a Bounded Context
    • Bounded Contexts, Core Domain, Subdomains, and Context Mapping
    • Domain Events and Aggregates
    • Project acceleration and management tools
  • Learn the basics of Event Storming using “big picture” and “design level” modeling
  • Apply your storming results to actual implementations using Aggregates and Domain Events
  • Use Domain Events to integrate with multiple Bounded Contexts
  • The tradeoffs of using traditional domain model persistence and Event Sourcing

details-eddd

Workshop Details

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 subsystems using DDD and straightforward design techniques. Context Maps are not just drawings. Use them for cross-team communications, project thinking, learning, planning, and as an integration tool.

Architectures that support DDD

See how the Microservices Architecture, Ports and Adapters Architecture, along with an Event-Driven Architecture, can be used to support your DDD projects. Coupled with DDD, these architecture styles and patterns will support your microservices efforts.

Domain Events and Event Storming

Learn to use Domain Events and Event Storming for both “big picture” systems designs and “detail level” tactical designs. Exercises will lead to using and Event-Driven Architecture in Day-2 implementations.

Aggregates

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

Acceleration and Management Tools

Every project stakeholder knows the urgency of staying on task and on time. What techniques and tools can be used to accelerate your DDD effort, provide project estimates, time box domain modeling efforts, collaborate with domain experts, and how much time will that require? The answers are given and reenforced through practical guidelines.

prepare-for-eddd

What to expect and how to prepare

Understand that much of two days will be spent implementing using Java or C#. This is not a workshop for juniors, and at least 5-10 years of programming experience is recommended. You are required to supply your own computer, programming environment with build and test facilities that you use regularly, and your thinking cap.

Want to get started?

mddd

Managing Domain-Driven Design

Put your business first with DDD

Intensive, 1-day, hands-on workshop by Vaughn Vernon

Thorough and exhaustive, 1-day, hands-on Managing DDD Workshop. Short lectures, exercises, and innovative game-play lead you to a clear understanding of how to leverage DDD, putting it to use on your Agile project. It’s a class that is well balanced for business experts and technical stakeholders alike.

what-to-expect-mddd

What to expect with DDD

Explore the business value of using DDD, and become well informed about when to use DDD and when not to use it. Practice the five primary steps to using DDD on a project. Learn to participate in a DDD project as a domain expert by helping to develop a Ubiquitous Language. Understand how to find the right domain expert(s) and the need to support developers in their efforts as a close-knit team. Learn about the importance of proper software test when using DDD, and how agile development can work on a DDD project.

Taking a strategic approach to developing business solutions

Here we will look at common legacy and other project situations that can challenge your ability to succeed, and why using a strategic approach is so important. This module weaves in the business vision and why it is vital to follow the course that is most important to the business initiative. Techniques are presented as tools for recognizing where the pre-existing and supporting software is, and how to leverage it to develop your core business vision. Discussed is how to prioritize software as core, supporting, and generic, and where to allocate developer resources based on abilities. Here you will learn a strategic modeling technique known as Event Storming.

Managing a DDD Project

Every project manager knows the urgency of staying on task and on time. What techniques and tools can be used to accelerate your DDD effort? How will your developers choose their architectural mechanisms? How will they provide project estimates that you can count on? How will the team time box domain modeling efforts? How frequently will domain experts need to participate in design discussions with with developers, and how much time will it require at various stages in the project? How can you use a common agile project management framework to keep the project moving forward at the correct pace, but without stifling the creativity of the domain modeling effort? The answer to all of these questions, and more, is explained and reinforced through practical guidelines.

Common problems you will face and how to overcome them

Every software development project faces the challenges of the real demands of the business and business stakeholders that do not align with the goals of the development team. This subject addresses the need to get buy-in from the business and to heavily weight the team developing the core DDD product(s) with the proper capabilities in order to ensure their success. Here we probe various common business challenges and how to work around them.

Moving forward with DDD

We wrap up this workshop by reviewing the big picture of DDD and how you can succeed with it by ensuring that your priorities are focused on the business and how the software systems take a company-distinguishing approach rather than focusing purely on technology.

Want to get started?

Top