DDD is a software development approach, acting like a conceptual framework that cares about issues both technical and business.
The central idea of the approach is to bring IT and business.
For that to happen it's essential that the domain expert (client) and development team are close, through various discussions and meetings.
It's best recommended to complex domains.
But what domain?
What is a software domain? It is the purpose for which the software exists. The subject area to which the user applies the software.
But what design?
What is a model? A model is an abstraction. “ A model is a simplification. It is an interpretation of reality that abstracts the aspects relevant to solving the problem at hand and ignores extraneous detail."
“ A model is a selectively simplified and consciously structured form of knowledge. An appropriate model makes sense of information and focuses it on a problem.”
“ The model focuses requirements analysis.”
“ ...the model is not the diagram. The diagram's purpose is to help communicate and explain the model.”
What is a domain model?
Is the model of the (software) domain.
The domain model should use the ubiquitous language.
What is the Ubiquitous Language?
Ubiquitous language comes from domain experts and serves to unify domain experts's jargons with developers's jargons (with respect to the domain model).
There should not be two words for the same thing.
The model should reflect the ubiquitous language.
The code should reflect the model.
The extent to which the language evolves and changes, model, code, classes and methods also change together. This leads to the practice of refactoring.
“ The model-based language should be used among developers to describe not only artifacts in the system, but tasks and functionality.”
“ Use the model as the backbone of a language.”
DDD is about the heart of the software.
“ The heart of software is its ability to solve domain-related problems for its user. All other features, vital though they may be, support this basic purpose.”
What others software approachs are good to work with DDD?
- Iterative software development
- XP (Extreme Programming)
When domain experts works together with developers, the model becomes cleanly organized and abstracted, reflecting deep knowledge of the business, where abstractions are true business principles.
Domain expert usually is the client employee that knows how its business works.
Implementation and model evolves over time, and both must be synchronized to remain valuable.
Model-Driven Design is the approach to design the software, that is driven by the models.
Model, design and implementation are developed iteratively, and the evolution that each of these processes brings will change each others.