« QCon San Francisco, 2007 | Home | Welcome! »

Eric Evans on Domain Driven Design (again)

By indomitablehef | November 12, 2007

A full-length video presentation from Eric Evans on DDD: putting the model to work

I attended the DDD BOF (Birds-of-a-Feather) group at the QCon conference, hosted by Eric. Some of the things that resonated with me from that session:

1. Look for Pain Points
It should be a given that not all parts of a large, complex system will be well designed (he gave a presentation on that earlier in the week, too). So, don’t waste time doing a complete overhaul of an existing system in an attempt to take advantage of Domain Modeling and Domain Modeling. Instead, look for pain points, problems, things that are difficult, and things that annoy. There’s a good place to start refactoring towards a domain driven design.
2. Well placed Value objects
For clues on how to refactor towards DDD, look for places where you are passing strings around. A few well-placed value objects, instead of strings, can encapsulate domain concepts, and get you started in the right direction.
3. Bounded Contexts
Eric said several times that he wished that Chapter 14 of his domain driven design book had been chapter 2, because a lot of people never got to chapter 14, and it turns out that Bounded Contexts (the subject of chapter 14) are critical. Building anti-corruption layers between systems you have control over and systems you don’t have control over is a good way to maintain the purity of your domain model. These anti-corruption layers are a type of Bounded Context.

Update:

Another thought on those Bounded Contexts. A domain model is “a” model of a system, of a domain. It is rarely “the” model. And that’s ok. Multiple models may be useful for different purposes. In supply chain, the contract management model is different from the purchasing model. Much of the underlying system overlaps, but these different models are perfect for their different purposes. A bounded context (or bounded contexts), then, can be used to translate between the models, and  preserve the usefulness of each.

Topics: Uncategorized |

Comments