Lately I’ve been wanting to read Domain Driven Design book by Eric Evans but then I found Domain Driven Design Step by Step by InfoQ and just in the foreword it says that I must read DDDQuickly also by InfoQ before proceeding, so I downloaded it (PDF)and started reading a few chapters.
I have now stopped reading the book mainly because it got to the point where I thought I needed to see a concrete example of it’s implementation in C#/.NET which I couldn’t find and also because I have found another great read.
Below are some of the notes that I think are the key takeaways from the read so far, I’m sharing them here thinking they might be useful to someone with a disclaimer that they are my notes and I make no warranties for the accuracy, if you are serious about DDD than start reading the book.
Domain – knowledge of the the domain is important before building software, e.g. for banking. Bankers know better about the rules that anyone else.
Model - Is the internal representation of the domain, we must communicate this upfront to all the stakeholders in a software design, the domain experts, domain analysts and off course developers.
Ubiquitous Language - when domain experts and developers talk they often use some keywords use to describe the system, these keywords make up the domain that is used in UML diagram and Documents explaining those diagrams and ultimately in Classes and Variable names in the code.
Analysis model – a model created by domain experts while not taking into account the software used to code therefore make matter worst at software design time, where developers have to make few decisions on their own. The idea is to choose a model that can be appropriately represented in software.
The key is to involve developers at Domain Model design stage with Domain experts and analysts to let them get the first-hand knowledge of the domain rather than having to understand it with the help of diagrams and documents.
Entities - entities should be unique and defined with a ID, not everything should be Entity but it can be Value Object
Value Object – are unchangeable objects with no unique IDs and created using Constructor, their values cannot be and must not be changed, if new value is needed, simply create another Value object.