D2 Domain-Driven-Design
D2 Domain-Driven-Design
Arnaud Bouchez
June 2015
Domain Driven Design (DDD)
Is DDD good for you?
Modeling your objects
Patterns
Architecture
practice
Model-Driven
Design
Clean/Layered/
Ubiquitous Bounded
Services Entities Value Objects Hexagonal Events RAD
Language Contexts
Architecture
Repositories Factories
Model-Driven
Design
Clean/Layered/
Ubiquitous Bounded
Services Entities Value Objects Hexagonal Events RAD
Language Contexts
Architecture
Repositories Factories
Model-Driven
Design
Clean/Layered/
Ubiquitous Bounded
Services Entities Value Objects Hexagonal Events RAD
Language Contexts
Architecture
Repositories Factories
Some patterns
Tryto always separate value and time in state
Reduce statefulness to only the necessary
Via Events
When a system does change its state very often
See Event-Driven Design or Event Sourcing
Model-Driven
Design
Clean/Layered/
Ubiquitous Bounded
Services Entities Value Objects Hexagonal Events RAD
Language Contexts
Architecture
Repositories Factories
Model-Driven
Design
Clean/Layered/
Ubiquitous Bounded
Services Entities Value Objects Hexagonal Events RAD
Language Contexts
Architecture
Repositories Factories
Model-Driven
Design
Clean/Layered/
Ubiquitous Bounded
Services Entities Value Objects Hexagonal Events RAD
Language Contexts
Architecture
Repositories Factories
Workflows
get/save use
execute
objects objects
Domain
Services
Domain
Model
Third Party Repository Domain
Unit Tests
Interfaces Interfaces Interfaces
Aggregates
Entities
Value
Objects
Database is external
There is no such “database application” in DDD
As any other third-party service
Workflows
get/save use
execute
objects objects
Domain
Services
Domain
Model
Third Party Repository Domain
Unit Tests
Interfaces Interfaces Interfaces
Aggregates
Entities
Value
Objects
Code-driven reporting
Data from ORM/SOA objects, not TDataSet
Integrated preview and PDF export
AJAX Reporting UI
HTTP 1.1
Application
REST Server
Domain
Model
Services
(interface-based)
Data persistence
ORM
Cross-Cutting
External DB