Alexander Beletsky's development blog

My profession is engineering

DDD, Domain Driven Design

There is one great book by Jimmy Nilsson Applying Domain-Driven Design and Patterns (russian translation of that book is just awful, so now I’m looking for orignal copy). Jimmy is describing DDD with a very nice examples and concepts, also he gives a good attension to TDD and refactoring. If you want to start with DDD (and you have to) you should check DDD website and I really liked personal blog of Jimmy Nilsson.

I already did use DDD in my previous posts while I designed registration functionality for web application. I believe that many of you are using DDD in your development practice but it could be rather implicit practice.

DDD is not something strict like methodologies or technologies are and give no strict rules how to do things, but rather a way of thinking how to work with domain specific within software development. What I personally like in DDD that it goes with a set of patterns that also helps to form common vocabulary for developers. There is a document that gives short summarize on DDD patterns, you can get is here.

Let’s review triangle of What/Why/Where for DDD.

What ?

Domain Driven Development is a way of thinking for development of software that do focus on:
  • Core domain - Understanding of domain is vital for any software product. Proper representation of domain with tools and languages you have is vital for any software project.
  • Patterns - If I met some problem I’m really sure that I’m not first person who did, and probably this problem is alredy solved (probably well enought). Such “solved” problems forms so called patterns, something “know-how” that could be reused for another partcular needs. There are no reasons to reinvent wheeel.
  • Collaboration - Collaboration between developers and domain experts as more extensive as possible. Experts could be a customers (customer on site as XP says) or other representive who in charge of product (product owner as Scrum says).

Why ?

Software is something that suppose to solve problems we met in life. DDD focused on these problems and tries to desing software as closer to problems as possible. Personally I think that DDD is a native way of software development.

Where ?

Everywhere actually. DDD is not for some specific areas. So, Web, Desktop, Fun or Science.. everything is applicable.


As I said on a beginning DDD is something that every developer shound aware about it (I would highlight word “aware” meaning it is not expected to be an expert on it, that always good, but know that it is exists and know key priciples). You will easy found a start up materials in internet. Meanwhile if I meet some examples of DDD patterns implementation I’ll do blog about it.