The four patterns
Four recurring causal shapes organize Event Modeling workflows.
| Pattern | Core question | Typical flow | Human? | External boundary? | HCL workflow |
|---|---|---|---|---|---|
| State Change | What does someone want to change? | Screen/API → Command → Event | Often | No requirement | state_change |
| State View | What does someone need to know? | Event → Read Model → Screen | Often | No requirement | state_view |
| Automation | What should the system do next by itself? | Internal Event → Read Model/Processor → Command → Event | No | No external event input | automation |
| Translation | How is another context's fact translated into the model's language? | External Event → Read Model/Processor → Command → Internal Event | No | Yes | translation |
Quick check: which pattern turns intent into fact, and which turns facts into an answer?
State Change
A user or other trigger wants something to happen. The system evaluates the Command. If accepted, one or more Events record the resulting facts.
The bounded context owns the Event. The workflow references it. An API-triggered Command can use api_endpoint instead of a Screen.
State View
Facts already exist. A Read Model folds or interprets those facts so a user or API can answer one question.
Catalog Event to Read Model is written as readmodel.from. Read Model to Screen is written as readmodel.to.
Scenario: GIVEN Event(s) → THEN Read Model.
Automation
The system reacts to its own internal facts and issues a new Command without a user screen.
An Automation consumes internal Events. External input belongs in a Translation.
Translation
Another context or external system speaks in its own language. A Translation takes an external fact and turns it into a Command/Event in the receiving context's language.
A Translation consumes an Event from an external bounded context. A Processor may receive that Event directly when no Read Model is needed.