The aim of creating this page is to write down what I have understood about the Domain Driven Design. DDD is a heuristics rather than any fixed approach to design your software to handle complex business logic.
It helps to pay attention to the words we use in our software where we overlook the crucial information by assuming many things. For example, in shipping, we might say Cargo is a series of legs. But in DDD, we pay attention and try to think and we might say a Cargo itinerary is a series of legs. So it is more clear to consider the itinerary during your model design.
DDD is an approach where we welcome bad ideas to solve the design so that we can think about the solution from a different angle. We need to select after we have multiple alternatives
- Don’t get excited or agitated
- Don’t get excessively particular rather than being open to different ideas
- If you don’t get ideas, move to other things and come back later
- You might discuss the problem in multiple sessions
What is Domain?
The domain is a sphere of knowledge and activity around which the application logic evolves.
What is a Model?
A system of abstracting representing selected aspects of a domain. The model is to solve a specific, difficult, and important problem rather than solve the whole problem. “Usefulness” is an important characteristic of the model which is specific to a particular set of scenarios. When you ask which model is more useful then your thinking process gets changed by thinking about what I am asked to do? Then we look for concrete reference scenarios about the business.
What is Ubiquitous language?
Model is also not just about few words rather it describes how all these words are connected. A model acts as a UbiquitousLanguage to help communication between software developers and domain experts.
What is Bounded Context?
As the Model tries to solve an important and specific problem which means there might be multiple problems in a business need to be addressed. Each specific problem has it’s own bounded context in which a model will be fit into that particular problem.
References:
https://martinfowler.com/bliki/BoundedContext.html
https://medium.com/inato/an-introduction-to-domain-driven-design-386754392465