Domain Driven Design
Wat is DDD?
Een verzameling van best practices voor het ontwikkelen van software systemen
- Waarbij het domein (lees: business rules) complex is
- Waarbij dat domein de kern vormt van een organisatie of bedrijf
- Waarbij wendbaarheid en vermogen tot aanpassing, dan wel uitbreiding van de software zeer wenselijk is
- Bij veranderingen gaat het zich terugbetalen
Goed idee als
- Als er een eigen afdeling is die zich bezig houdt met het probleem
- Geen shortcuts nemen
- Sommige mensen zijn vegatarisch en andere niet
- Soms geneigd om hier een lijst van booleans van te maken
Gevaren
- Dingen maken die niet nodig zijn
- Proberen zo snel mogelijk verstand te krijgen van het domein
Hoe?
- Korte lijntjes, veel interactie
- Gezamenlijke brainstorm-sessies
- Naar mate het project vordert en je meer kennis krijgt van het domein, zie je dat niet het hele team meer met de opdrachtgever gaat praten, maar het doorvertelt aan elkaar
- 1 gemeenschappelijk beeld van gedrag en werking van software (domein model)
- Formailisering van taal en termen
- Code leest als een boek en matcht heel direct met het domein model
Toepassen
Projectvorm
- Expliciet maken van eilandjes (bounded context)
- Ontdekken van gedrag en complexiteit
- Opstellen van requirements
- Modelleren en afstemmen van het domein model
- Formaliseren van taal en terminologie (ubiquitous language)
Programmeervorm
- Hoe zet ik een service in elkaar? (CQRS / Onion Architecture)
- Hoe programmeer ik het domein model uit?
- Hoe test ik mijn applicatie?
Woordenboek
Hoe meer moeilijke termen, hoe beter het is om een woordenboek bij te houden.
Begrippen
Value Object
Een immutable object zonder identiteit. Soort struct. 2 value objecten worden op inhoud vergeleken met elkaar.
Voorbeelden
- Tijd
- Datum
- Categorie
- Leeftijd
Entity
Een object met een identiteit. Bijvoorbeeld een id.
Voorbeelden
- Burger
- Bestelling
- Leerling
- Product
Aggregate
Een cluster van domein objecten die als 1 eenheid behandeld kunnen worden.
Aggregate root
Het root-object van een aggregate. Via alleen dit object kan er iets in het aggregate gewijzigd worden. Dit is typisch een Entity.
Bounded context
Een bepaalde context waarin een domein object een bepaalde betekenis heeft. Het domein object kan in een andere context een andere betekenis hebben.
