Domain Driven Design
After a long time, I’m rushing to finish the Eric Evans best seller book Domain Driven Design, and I found very interesting the ideas inside it. I’ve been fan of object-oriented, software architecture and OOAD since the first time I learned OO, a long time ago.
The idea behind Domain Driven Design is very simple : Put the model to work through a set of techniques that will make the development easier, things more clear, and shield the domain model against things that doesn’t belong to there. As a known issue, the domain model is the most critical issue behind enterprise software development, because it’s the heart of every software written by a human. Every single funcionality comes from it, and the domain is the basis of all external interfaces and services, because is the Domain Model responsibility’s to deal with the business issues.
Seems to be clear and easy to understand ? the answer is yes and no !
Software is about humans writing software ( good or bad ones ), and a software is just a tool to achieve a business goal, such as “place an order” to buy a book. The company’s goal is to sell the book, but it will need a good software that supports their business needs. Coming back to the part of putting the model to work, where a model is an abstraction of the reality, I mean, a way to visualize and communicate the ideas behind that particular software that we’re writing.
I’ve seen so many times a model that has little to say about the software that is running or it completely does not say anything anymore about working program, because someone draw it in the past, but they did not evolve it, in order to keep track of their communication. It’s very frustrating to start work on a software like this, because it looks like there is a documentation or concepts that will guide us to understand the problems the software is supposed to deal with, but in the end what exists is a poor picture about some fact in the past. So, domain driven design tackles this issue, putting the model to work, bringing life to these pictures, in order to communicate what exacly the software is, keeping track of changes, creating a unique vocabulary between technical and non-technical people ( the Ubiquitous Language ), that is a technique to put everybody on the same page, speaking the same language.
Talking about Ubiquitous Language, I answered a post at linkedin few days ago, because there was a person who asked which “Jargons” he should use to present a software architecture, and I just answered him, use a language that the his audience can understand better, preferrably use or build a Ubiquitous Languag, because you can’t have a concept that the user doesn’t understand, because it will lead you to an infinite talk about what is what, there will be lots of misconceptions and you’ll fail to deliver a good software… and I hope he listened to me.
Vijay Patel:
Hi Marcio,
You’re right about Domain Driven Design – the idea _is_ simple. In reality, however, many Developers find it difficult because they’re disconnected from the business. This is where the breakdown begins: either management don’t believe that Developers should talk to Domain Experts, or Developers simply don’t care about the Business Domain. Either way, software quality diminishes as a result.
I wrote a tool to makes it easier to communicate and visualise the Ubiquitous Language. You can learn more about it at my website.
Best of luck with your new DDD skills!
11 June 2009, 10:06 pmadmin:
Hi Vijay,
Yeah, that’s totally right !!!!
As I said before, everything goes around communication, and everybod must speak the same language,
having the same understanding about the business we’re dealing with.
What happens in the most cases is a kind of translation between the business people and the technical ones, but it will be another post !
I will take a look at your tool soon.
12 June 2009, 6:33 am