The 3-day Workshop that rapidly unlocks the secrets to implementing DDD, both strategically and tactically. This Workshop is specially designed for mid-level and senior software developers and architects.
Day 1: 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 Subdomains, Bounded Contexts, and Context Maps. Finally Day 1 crosses over to architecture, preparing you to employ Ports and Adapters, Event-Driven, and other powerful architectural tools as you develop a new SaaS-based Bounded Context in classroom exercises. This new Bounded Context is a Core Domain where you will next learn tactical modeling skills 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. 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.
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
In Day 2 we switch our focus to tactical design, giving you the aptitude to make proper finer-grained modeling decisions within a single Core Domain. Whether its the use of Entities, Value Objects, Aggregates, Domain Services, or Domain Events that best fit your specific modeling situation, you will 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 tradeoffs.
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.
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.
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.
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
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 your new Core Domain and other Bounded Contexts in the SaaS-based enterprise. Finally we give attention to other parts of the application, such as the user interface, using CQRS, and developing Application Services as your API. 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 with examples for O-R Mapping, Grid, and MongoDB. You will also learn how to use Event Sourcing as both a persistence approach and to publish Domain Events for broader consumption.
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. Here you will learn how to apply CQRS from Domain Events published from your Event Sourcing store.