What is a Domain-Driven Design?
Domain-Driven Design (DDD) is an approach to software design that focuses on the application’s domain or problem area. It is a technique for aligning the implementation and team topology with the underlying structure of the domain.
This DDD training course will teach you all the fundamentals of Domain-Driven Design.
How to collaborate between stakeholders from the business side and software development side to ensure the software meets the needs of the business.
Creating a shared understanding of the domain through various modelling techniques, from Business Model Canvas at the company strategy level via EventStorming and Context Mapping for exploration & design to domain-specific languages in tactical and architectural patterns.
Learn to build a scalable and decoupled system optimized for correct domain behaviour without sacrificing execution performance. The secret to a successful implementation lies in the proper segregation of models and a focus on language.
Join Marco Heimeshoff for this remote 5-module Domain-Driven Design course as he’ll guide you to build semantic models with a high alignment between business and code
The Trainer
Marco Heimeshoff is a Software Developer, a passionate EventStormer, a coach and a Speaker.
Care Bear of DDD, cultural optimist, helping others to become better versions of themselves.
Marco Heimeshoff is also the co-organiser of KanDDDinsky.
With over a decade of experience, he helps teams grow by guiding them through everything from code to culture, teaching practical mastery of Domain-Driven Design, Agile development, functional programming, and CQRS with Event Sourcing.
When he’s not consulting with companies around the world, Marco speaks at international conferences on Domain-Driven Design, socio-technical systems, and software design fundamentals.
Learning Objectives
- Understand Domain-Driven Design (DDD) and when it applies
- Learn to model the domain and explore multiple solutions to choose from
- Align your design with your business needs using CQRS and DDD
- Build scalable and decoupled applications with Event Sourcing.
Target Audience
This workshop is for Architects and Senior Developers with a strong interest in Domain-Driven Design and modern message-driven architectures.
Program
Software is usually written to solve actual business problems, yet the connection between understanding the domain and designing the code is often poorly understood or dismissed.
We will explore all intersections in the software development process. We will take the entire journey from strategic analysis and domain exploration to system design, architectural blueprints and implementation.
In this course, you will learn how to approach any modelling situation at various flight levels, and you will start building your own toolbelt of heuristics to adapt to any future needs.
Learn about the systemic forces between business strategy, team topologies and software architecture and become an expert in designing and implementing a software system aligned with the domain in a simple, cohesive and decoupled way.
Marco will help you to put your energy where the business value is by letting you partition your team by their expertise and outsource the busy work.
Agenda
The first three sessions focus strongly on business strategy, exploratory modelling and strategic design, the last two sessions dive deep into the implementation of domain models with CQRS and EventSourcing.
The agenda will always dynamically adjust to the level and expectations of the attendees.
Session One
- Domain-Driven Design overview: Essential ideas and terminology
- Understanding your business model and the stakeholder needs
- Explore various methods for collaborative exploration
- Why, how and when to apply Domain-Driven Design
- The forces that shape your solution
Session Two
- Introduction to various flavours of EventStorming
- Sychronising mental models in the problem space
- Exploring options to improve the solution space
- Heuristics to generate value from an EventStorming model
Session Three
- Optimize strategy using Subdomain Mapping
- Context Mapping – Align your architecture with your organizational structure
- Discover heuristics to design and decouple bounded contexts
- Cynefin – Different Levels of complexity in strategic design
Session Four
- Hexagonal Architecture – Ports and Adapters in action
- Tactical DDD Patterns – Exercises in implementing domain models
- Events – Atomic building blocks of your domain
- Projections – Poly Structured information into various read models
- Implementation using Behaviour-Driven Development
Session Five
- CQRS overview: Essential ideas and terminology
- Dealing with scalability, performance and eventual consistency
- Implementing policies with Sagas
- Strategies for long-lived, evolving and distributed systems
- Benefits, risks and socio-technical implications of CQRS and Event Sourcing.
How it works
We will meet online in a virtual classroom and use presentation through screen share, collaborative architecture modeling on Miro and Solo- and Mob-programming with screen-shared IDEs. Every module will begin with a presentation via screen share and lead to a collaborative exercise. Discussions and questions are encouraged all the time.
F.A.Q.
Do I need to have previous knowledge to attend this DDD training course?
Attendees will benefit from coming prepared with knowledge about DDD, CQRS and Event Sourcing, but this is not a prerequisite.
Laptop and language
All code examples will be in C#. No prior experience in C# is required to understand the examples, we will work through the concepts from start to finish.