Modelling
Unified modelling language
- The modelling language should be able to clearly communicate the meaning of the concepts it represents.
- Declarative style language to make it easier for the developers to comprehend its meaning.
- One model should underlie implementation, design and team communication.
- The modelling process should be intuitive and follow a step-by-step approach. e.g. Event storming.
Event storming
- Event storming is for discovery. Its not designed for translation of requirements into an application design.
- We need a modelling language that can take the results of an event storming workshop as input.
- Stakeholders: Business, tech, UX
Vocabluary of Event storming and Domain Driven Design
- Domain events (Orange): A state transition happening in the system. Every Event storming workshop starts with identifying domain events on a timeline.
- Problem areas (purple): Based on their experience, stakeholders list down potential problems/challenges with each domain event.
- Commands (blue): An action started by a user. This typically triggers a domain event. This is also used to analyze User experience UX.
- Actors (Yellow): Users interacting with the system. Further refined into personas.
- Read models (Green) - Data needed by the user to make a decision
- Policy (lilac) - A reactive logic based on some domain event. A command is triggered based on some event.
- Aggregates (yellow) - These are the logical entities that encapsulate a group of domain events/commands/policies etc. Aggregates should be completely contained within and independent of each other, i.e., mutually exclusive and exhaustive.
Sources of Domain events
- Commands
- External systems integrations
- Other domain events
- Time based policies (cron jobs)
From event storming to application desgin
- Bounded contexts become modules/micro-services
- Aggregates become services within bounded contexts
- Commands become API endpoints
- Policies become service constraints and business logic
- Domain events become events