When DDD should be considered ?
This is a recurring question on the DDD yahoo group. And there was a simple explanation during the ParisJug talk.
DDD is not a silver bullet for all application development, it just helps to manage complexity when the complexity comes from the domain.
No need for DDD when working on a technical application or a small application with few interactions.
You could benefit from DDD when your application looks like the Cargo sample :
- Route containers based on transports availability
- Take cost and time into account
- Know where are the boats
- Organize loads and unloads
- Manage container storage (emit order of missions for employees on site)
- Provide container tracking and tracing to clients
- Transports can be late, manage it
- Transports can be canceled, manage it
- Contracts can be changed, destination can change
- Containers can be incorrectly routed even if emitted orders where correct, manage it.
- Manage taxes
- Manage time zones
- Manage currencies
- Manager constraints and local rules on dangerous containers contents
In this kind of application, the complexity doesn’t come from an Xml web service or a database schema. Even without taking account any technical concern, it is complex !
So there is a simple rule of thumb to know if DDD could apply (independently from the size of the project) :
Try DDD if Domain Complexity >> Technical Complexity
In other case you can just go with your preferred classic architecture.