Don't stop at the first model you come up with --> constant evolution.
Should be amongst the first chapters!
Explain it in business terms --> If have this we'll be able to ... (e.g. "Enter a new Market", et...)
- Representing the states of entities
- Decoupling subsystems with event streams Example: Core transactional system that takes care of addressing the business problem is not tightly coupled with the reporting system. Use Context Map to show the different contexts --> does not mean we need to use different models, but we could.
- Enabling high performance systems (Greg Young)
Not emphasized enough.
- Transactions
- Distribution
- Concurrency If stuff happens all over the place for the same conceptual whole, it is impossible to understand, hence to change. --> Always try to gather things in a conceptual whole, keep pulling back to the model:
- "We've got this transactional problem."
- "Why? What is the rule that we discovered we need to enforce? And how can we incorporate it in our conceptual model? What is it about that that it is so associated with this? Why do we need them to be so together?"
These questions can also lead to discovering we dont need an aggregate for this concept. Maybe it is just a monster aggregate that should be separate things.
- Properties
- Invariants
- Context Mapping
- Distillation of the Core Domain
- Large-scale structure
Where modelling comes really useful is not in the big known happy flow, it is in the details, the specific rules and intricacies.
Where there is a need for extreme clarity. Comparison with APple product:"What do people want with an mp3 player?" And those parts are crystal clear
"Clean" because it is clear what every context is doing, their responsibility. There is no chaos.
Get a chance to experiment and make the model evolve along with learnings that are put back into it.
A setting in which a word or statement appears that determines its meaning.
A description of the conditions under which a particular model applies.
Two teams that are:
- Mutually dependent: Not on the technical sense, but on the sense "Can I deliver my project succesfully if they don' t?"
- Cooperative.
Original concept Concept introduced by the realisation that there is very little written about the most popular architectural pattern, which is when people just do stuff all over the place, "dictated more by expediency than design". "'Let's just put it there for now and not worry about it'. It builds up and it builds up and yet functions"
Dont fix it We draw a Context Map and put it where it belongs: Define the boundery with some firm assumptions.
- The service interface must be defined in some context
- Internals also, but often not the same one (it is actually thevalue of the service)
- The Service interface may define a context boundery