Production-ready Domain-Driven Design
The essence of Domain-Driven Design is designing shared models between all disciplines involved in creating software. We should spend most of our effort on the part of the software that handles complex business requirements. We need to focus on a language where we really crisply concisely describe the situation in the domain, a shared language created through conversations between all disciplines involved.
Eric Evans wrote about the Model Exploration Whirlpool. It describes a process for exploring models. In this workshop, you will learn to use this process from exploring the problem space to probing a model in code to deploying production-ready software.
Who should attend?
You want to know how to explore models collaboratively. You want to learn how to move from collaboration tools like EventStorming and Example mapping to designing models and implementing them, especially in an Agile or Lean setting.
Learning objectives
We’ll explore scenarios and models for a business domain during the first part with EventStorming, Example Mapping, context mapping, and Responsibility Driven-Design. In the second part, we will refactor to deeper insights with supple design and deep model and start our code probing with our newly designed bounded context. We will go from outside-in Object-Oriented TDD and bug hunting toward functional-style programming in several labs. We’ll finish protecting our bounded context with the Ports & Adapters architecture. You will leave this session with hands-on experience to start your exploration into creating a production-ready, Domain-Driven Design!
Key take-aways:
- How to model and design bounded contexts with the Model Exploration Whirlpool and create production-ready software.
- Collaboratively design with visual collaboration tools like EventStorming, Example Mapping, Context Mapping, and Responsibility mapping based on CRC cards.
- Learn how to use and implement the basic tactical DDD patterns like Entity, Value Object, Aggregate, Service, and Repository.
- How to work towards a functional mindset in an object-oriented language.
- The DDD concepts Supple Design and Deep Model.
- Protect your bounded context by splitting accidental complexity from the essential model complexity with the Ports and Adapters architecture.
Is this workshop right for me?
- You are a Software Developer or a Software Architect
- You know how to do object-oriented programming in Java or/and C#
Program
Module 1 (Scenario):
- Introduction
- Domain-Driven Design a brief tour
- Process Eventstorming
- Introduction to the Bounded Context pattern and context mapping
Module 2 (Model):
- Software design level Eventstorming
- Example mapping
- Responsibility Driven-Design based on CRC cards
Module 3 (Model-Driven Design through Code probe):
- Coding Lab 1: Implementing a bounded context using Outside-in TDD
- Coding Lab 2: Supple design - Make the potential of the model clear
Module 4 (Deep modelling):
- Coding Lab 3: Deep Model - refactoring to deeper insights
Module 5 (Production Ready):
- Coding Lab 4: Ports and Adapters aka Hexagonal architecture - Protecting your bounded context domain model
- Ask us anything on how to move on from here!
Prerequisites:
- Read the free ebook The Anatomy Of Domain-Driven Design: https://leanpub.com/theanatomyofdomain-drivendesign
- It is nice to have read Domain-Driven Design by Eric Evans (the blue book), it is not required.
- Your favourite IDE with java (Maven/Lombok) or C# (nuget)
Online:
- An up to date Zoom client (https://zoom.us/)
- A free Miro account (https://miro.com/)