@JulienTopcu
@JosianChevalier
@JulienTopcu
@JosianChevalier
Comfort
Class
Price
Schedule
Fare
Space
Train
Booking
Criteria
Selection
Search
Price
Bound
Schedule
Fare
Space
Train
Comfort
Class
Mandalore Express
@JulienTopcu
@JosianChevalier
Comfort
Class
Price
Schedule
Fare
Space
Train
Booking
Criteria
Selection
Search
Price
Bound
Schedule
Fare
Space
Train
Comfort
Class
Mandalore Express
@JulienTopcu
@JosianChevalier
Comfort
Class
Criteria
Selection
Search
Price
Bound
Schedule
Fare
Space
Train
Price
Schedule
Fare
Space
Train
Booking
Comfort
Class
Search
Booking
@JulienTopcu
@JosianChevalier
Comfort
Class
Criteria
Selection
Search
Price
Bound
Schedule
Fare
Space
Train
Price
Schedule
Fare
Space
Train
Booking
Comfort
Class
Search
Booking
Duplicating ≠ Decoupling!
... when conceptually coupled
@JulienTopcu
@JosianChevalier
Comfort
Class
Selection
Search
Price
Bound
Schedule
Fare
Space
Train
Price
Schedule
Fare
Space
Train
Booking
Comfort
Class
Search ?
Booking ?
Criteria
Criteria
Bound
@JulienTopcu
@JosianChevalier
Comfort
Class
Selection
Search
Price
Bound
Schedule
Fare
Space
Train
Price
Schedule
Fare
Space
Train
Booking
Comfort
Class
Criteria
Criteria
Bound
Search ?
Booking ?
?
?
@JulienTopcu
@JosianChevalier
Space
Train
Search
Fare
Criteria
Selection
Schedule
Price
Bound
Booking
Space
Train
Fare
Schedule
Price
Comfort
Class
Comfort
Class
?
Search ?
Booking ?
@JulienTopcu
@JosianChevalier
Space
Train
Search
Fare
Criteria
Selection
Schedule
Price
Bound
Booking
Space
Train
Fare
Schedule
Price
Comfort
Class
Comfort
Class
?
Search ?
Booking ?
Splitting into services too early...
Trying to find boundaries...
Through behaviors ?
@JulienTopcu
@JosianChevalier
Space
Train
Search
Fare
Criteria
Selection
Schedule
Price
Bound
Booking
Space
Train
Fare
Schedule
Price
Comfort
Class
Comfort
Class
?
Search ?
Booking ?
@JulienTopcu
@JosianChevalier
Space
Train
Search
Fare
Criteria
Selection
Schedule
Price
Bound
Booking
Space
Train
Fare
Schedule
Price
Comfort
Class
Comfort
Class
Search ?
Booking ?
Amount
Currency
Amount
Currency
SpaceTrains
Booker
SpaceTrains
Finder
@JulienTopcu
@JosianChevalier
Space
Train
Search
Fare
Criteria
Selection
Schedule
Price
Bound
Booking
Space
Train
Fare
Schedule
Price
Comfort
Class
Comfort
Class
Search ?
Booking ?
Amount
Currency
Amount
Currency
SpaceTrains
Booker
SpaceTrains
Finder
@JulienTopcu
@JosianChevalier
Space
Train
Search
Fare
Criteria
Selection
Schedule
Price
Bound
Booking
Space
Train
Fare
Schedule
Price
Comfort
Class
Comfort
Class
Search ?
Booking ?
Amount
Currency
Amount
Currency
SpaceTrains
Booker
SpaceTrains
Finder
@JulienTopcu
@JosianChevalier
Search
Booking
Search ?
Booking ?
Amount
Currency
Selection
Bound
Fare
Schedule
Price
Comfort
Class
Criteria
Space
Train
Amount
Currency
Space
Train
SpaceTrains
Booker
SpaceTrains
Finder
@JulienTopcu
@JosianChevalier
Space
Train
Search
Booking
Search ?
Booking ?
Space
Train
Amount
Currency
Selection
Bound
Fare
Schedule
Price
Comfort
Class
Criteria
Amount
Currency
SpaceTrains
Booker
SpaceTrains
Finder
@JulienTopcu
@JosianChevalier
Space
Train
Search
Bound
Booking
Space
Train
Search ?
Booking ?
Amount
Currency
Selection
Fare
Schedule
Price
Comfort
Class
Criteria
Currency
Amount
SpaceTrains
Booker
SpaceTrains
Finder
@JulienTopcu
@JosianChevalier
Space
Train
Search
Criteria
Bound
Booking
Space
Train
Search ?
Booking ?
Selection
Fare
Schedule
Price
Comfort
Class
Currency
Amount
SpaceTrains
Booker
SpaceTrains
Finder
@JulienTopcu
@JosianChevalier
Space
Train
Search
Criteria
Selection
Bound
Booking
Space
Train
Search ?
Booking ?
Fare
Schedule
Price
Comfort
Class
Currency
Amount
SpaceTrains
Booker
SpaceTrains
Finder
@JulienTopcu
@JosianChevalier
Space
Train
Search
Selection
Bound
Booking
Space
Train
Fare
Schedule
Price
Comfort
Class
Criteria
Search
Booking
Shared Kernel
Amount
Currency
SpaceTrains
Booker
SpaceTrains
Finder
@JulienTopcu
@JosianChevalier
Search
Bound
Fare
Schedule
Price
Comfort
Class
Criteria
?
?
Space
Train
Selection
Search
Booking
Booking
Space
Train
Shared Kernel
Amount
Currency
SpaceTrains
Booker
SpaceTrains
Finder
@JulienTopcu
@JosianChevalier
Search
Bound
Fare
Schedule
Price
Criteria
?
?
Space
Train
Selection
Search
Booking
Booking
Space
Train
Shared Kernel
Amount
Currency
Comfort
Class
SpaceTrains
Booker
SpaceTrains
Finder
@JulienTopcu
@JosianChevalier
Search
Space
Train
Search
Booking
Booking
Space
Train
Space
Train
Search
Bound
Criteria
Selection
Shared Kernel
@JulienTopcu
@JosianChevalier
Search
Bound
Criteria
Space
Train
Selection
Search
Booking
Booking
Space
Train
AntiCorruption Layer
Space
Train
Search
Space
Train
Shared Kernel
@JulienTopcu
@JosianChevalier
Search
Bound
Criteria
Space
Train
Selection
Search
Booking
Booking
Space
Train
AntiCorruption Layer
Shared Kernel
@JulienTopcu
@JosianChevalier
Shared Kernel
Search
Booking
AntiCorruption Layer
@JulienTopcu
@JosianChevalier
What should we do about the Shared Kernel?
@JulienTopcu
@JosianChevalier
@JulienTopcu
@JosianChevalier
Space
Train
Search
Selection
Bound
Booking
Space
Train
Fare
Schedule
Price
Comfort
Class
Criteria
Shared Kernel
Search
Booking
Amount
Currency
@JulienTopcu
@JosianChevalier
Space
Train
Search
Selection
Bound
Booking
Space
Train
Schedule
Price
Criteria
Search
Booking
SEat
Location
Shared Kernel
Amount
Currency
Fare
Comfort
Class
@JulienTopcu
@JosianChevalier
Space
Train
Search
Selection
Bound
Booking
Space
Train
Fare
Schedule
Price
Criteria
Search
Booking
SEat
Location
Fare
Shared Kernel
Amount
Currency
Comfort
Class
Comfort
Class
@JulienTopcu
@JosianChevalier
Space
Train
Search
Selection
Bound
Booking
Space
Train
Fare
Schedule
Price
Comfort
Class
Criteria
Search
Booking
SEat
Location
Fare
Comfort
Class
Shared Kernel
Amount
Currency
@JulienTopcu
@JosianChevalier
Space
Train
Search
Selection
Bound
Booking
Space
Train
Fare
Schedule
Price
Comfort
Class
Criteria
Search
Booking
SEat
Location
Shared Kernel
Fare
Comfort
Class
Amount
Currency
@JulienTopcu
@JosianChevalier
@JulienTopcu
@JosianChevalier
Space
Train
Search
Selection
Bound
Booking
Space
Train
Fare
Schedule
Price
Comfort
Class
Criteria
Search
Booking
SEat
Location
Shared Kernel
Fare
Comfort
Class
Amount
Currency
@JulienTopcu
@JosianChevalier
Space
Train
Search
Selection
Bound
Booking
Space
Train
Fare
Schedule
Price
Comfort
Class
Criteria
Search
Booking
SEat
Location
Shared Kernel
Fare
Comfort
Class
Amount
Currency
Tax
Rate
Tax
Portion
@JulienTopcu
@JosianChevalier
Space
Train
Search
Selection
Bound
Booking
Space
Train
Fare
Schedule
Price
Comfort
Class
Criteria
Search
Booking
SEat
Location
Shared Kernel
Fare
Comfort
Class
Amount
Currency
Tax
Rate
Tax
Portion
Price
@JulienTopcu
@JosianChevalier
Space
Train
Search
Selection
Bound
Booking
Space
Train
Fare
Schedule
Price
Comfort
Class
Criteria
Search
Booking
SEat
Location
Shared Kernel
Amount
Currency
Fare
Comfort
Class
Tax
Rate
Tax
Portion
Price
@JulienTopcu
@JosianChevalier
Space
Train
Search
Selection
Bound
Booking
Space
Train
Fare
Schedule
Price
Comfort
Class
Criteria
Search
Booking
SEat
Location
Shared Kernel
Amount
Currency
Fare
Comfort
Class
Tax
Rate
Tax
Portion
Price
@JulienTopcu
@JosianChevalier
Space
Train
Search
Selection
Bound
Booking
Space
Train
Fare
Schedule
Price
Comfort
Class
Criteria
Search
Booking
SEat
Location
Shared Kernel
Amount
Currency
Fare
Comfort
Class
Tax
Rate
Tax
Portion
Price
Schedule
@JulienTopcu
@JosianChevalier
Space
Train
Search
Selection
Bound
Booking
Space
Train
Fare
Schedule
Price
Comfort
Class
Criteria
Search
Booking
SEat
Location
Shared Kernel
Fare
Comfort
Class
Tax
Rate
Tax
Portion
Price
Schedule
Amount
Currency
@JulienTopcu
@JosianChevalier
@JulienTopcu
@JosianChevalier
@JulienTopcu
@JosianChevalier
Space
Train
Search
Selection
Bound
Booking
Space
Train
Fare
Schedule
Price
Comfort
Class
Criteria
Search
Booking
SEat
Location
Shared Kernel
Fare
Comfort
Class
Tax
Rate
Tax
Portion
Price
Schedule
Amount
Currency
Amount
Currency
@JulienTopcu
@JosianChevalier
Space
Train
Search
Selection
Bound
Booking
Space
Train
Fare
Schedule
Price
Comfort
Class
Criteria
Search
Booking
SEat
Location
Shared Kernel
Fare
Comfort
Class
Tax
Rate
Tax
Portion
Price
Schedule
Amount
Currency
Amount
Currency
@JulienTopcu
@JosianChevalier
Space
Train
Search
Selection
Bound
Booking
Space
Train
Fare
Schedule
Price
Comfort
Class
Criteria
Search
Booking
SEat
Location
Shared Kernel
Fare
Comfort
Class
Tax
Rate
Tax
Portion
Price
Schedule
Amount
Currency
Amount
Currency
@JulienTopcu
@JosianChevalier
Space
Train
Search
Selection
Bound
Booking
Space
Train
Fare
Schedule
Price
Comfort
Class
Criteria
Search
Booking
SEat
Location
Fare
Comfort
Class
Tax
Rate
Tax
Portion
Price
Schedule
Amount
Currency
Amount
Currency
@JulienTopcu
@JosianChevalier
Booking
Search
ACL
U
D
@JulienTopcu
@JosianChevalier
Space
Train
Search
Selection
Bound
Booking
Space
Train
Fare
Schedule
Price
Comfort
Class
Criteria
Search
Booking
SEat
Location
Fare
Comfort
Class
Tax
Rate
Tax
Portion
Price
Schedule
Amount
Currency
Amount
Currency
@JulienTopcu
@JosianChevalier
Space
Train
Search
Selection
Bound
Booking
Space
Train
Fare
Schedule
Price
Comfort
Class
Criteria
Search
Booking
SEat
Location
Shared Kernel
Fare
Comfort
Class
Tax
Rate
Tax
Portion
Price
Schedule
Amount
Currency
Amount
Currency
@JulienTopcu
@JosianChevalier
Space
Train
Search
Selection
Bound
Booking
Space
Train
Fare
Schedule
Price
Comfort
Class
Criteria
Search
Booking
SEat
Location
Fare
Comfort
Class
Tax
Rate
Tax
Portion
Price
Schedule
Amount
Currency
Money
@JulienTopcu
@JosianChevalier
Booking
Search
Money
ACL
CF
CF
U
D
Generic Sub Domain
@JulienTopcu
@JosianChevalier
The Theory
@JulienTopcu
@JosianChevalier
Interphase
@JulienTopcu
@JosianChevalier
Interphase
@JulienTopcu
@JosianChevalier
Interphase
@JulienTopcu
@JosianChevalier
Prophase
@JulienTopcu
@JosianChevalier
Prophase
@JulienTopcu
@JosianChevalier
Metaphase
@JulienTopcu
@JosianChevalier
Metaphase
Shared Kernel
@JulienTopcu
@JosianChevalier
Everything in the Shared Kernel must have:
the same meaning
the same representation
(structure & types)
the same invariants
the same business rules
⚠️for all the bounded-contexts which use the Shared Kernel⚠️
@JulienTopcu
@JosianChevalier
Between teams, the Shared-Kernel should not be shared
@JulienTopcu
@JosianChevalier
Anaphase
Shared Kernel
@JulienTopcu
@JosianChevalier
Anaphase
Shared Kernel
@JulienTopcu
@JosianChevalier
Anaphase
Shared Kernel
@JulienTopcu
@JosianChevalier
Anaphase
Shared
Kernel
@JulienTopcu
@JosianChevalier
Residual Shared Kernel
Shared
Kernel
@JulienTopcu
@JosianChevalier
Simple Telophase
@JulienTopcu
@JosianChevalier
Multiple Telophase
Shared
Kernel
@JulienTopcu
@JosianChevalier
Multiple Telophase
Shared
Kernel
@JulienTopcu
@JosianChevalier
Multiple Telophase
To be continued...
Julien Topcu
Josian Chevalier
SHODO
This is the way
Model Mitosis: a dynamic pattern to deal with model tensions
By Julien Topçu
Model Mitosis: a dynamic pattern to deal with model tensions
Just as models should be iterative, strategic design should change when the context and our understanding of the problem evolve. As a model grows to solve more problems, it becomes less supple in its ability to evolve. Tensions arise within the model that struggles to stay coherent. Eventually it reaches a critical mass and becomes a big ball of mud. How do we know when it’s time to let new models emerge? How do we carry on the decision to split a model? How can we handle the progressive differentiation of our models while avoiding unnecessary coupling? It’s not as easy as a clean axe cut in the middle, finding the right boundaries is hard. We would like to introduce the Model Mitosis, a dynamic pattern used to split a model into multiple ones that will get shaped and decoupled iteratively.
- 606