Implementing Domain-Driven Design
Hands-on DDD Workshop
Sorry, the training is closed. Please go to the training homepage to see the list of upcoming events.
The IDDD Workshop is a hands-on class 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. 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.
This course aims at leaders/managers who want to become Agile, and people who want to become great team leaders or line managers. (No practical experience with Agile methods is necessary, though some familiarity with Agile principles and practices is useful.)
The course typically draws team leaders (15%), development managers (15%), agile coaches (15%), scrum masters (15%), project managers (10%), product owners (10%), developers and testers (10%), and top-level management (10%).
- Module 1: 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.
- Module 2: 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.
- Module 3: 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, planning, and integration tool.
- Module 4: Architectures that Support DDD
See how seven architecture styles and patters can be used to support your DDD projects. We will look at Layers, Dependency Inversion Principle, Hexagonal, SOA, CQRS, and Event-Driven Architecture for both Pipes and Filters and Long-Running Processes.
- Module 5: Entities
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.
- Module 6: 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.
- Module 7: 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.
- Module 8: 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.
- Module 9: 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?
- Module 10: Aggregates
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.
- Module 11: Factories
See when and how to use factories to support the creation of domain objects.
- Module 12: Repositories
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.
- Module 13: 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.
- Module 14: Application
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.