I confirmed this week that I’ll be speaking at the .NET BC User Group in July. The title of my talk is “Domain-Driven Design: Redux” and it is a reflection of how I would have preferred to learn Domain-Driven Design if I got the chance to start again.
There is a scene in Good Will Hunting where Ben Affleck’s character, Chuck, is in a bar trying to pick up a girl. Another guy steps in a tries to show up Chuck by spouting his opinions on what he learned in an MIT class that Chuck said he had taken. Matt Damon’s character, Will, steps in to confront the other guy and lectures him that he only holds his current opinions because he hasn’t taken the follow up course yet, and when he does, he will predictably hold a different opinion. The point here is that Will has already taken the journey through the stages of learning and he recognizes the mistakes that the other guy is making, simply because he hasn’t progressed far enough in his thinking to understand the higher concepts.
This is a pattern that happens in Domain-Driven Design all the time, I went through it myself, and it sucks. When I first learned about DDD I was so caught up in the details of entities, value objects and services, that I lost sight of why I even cared about these patterns. I spent days trying to decide whether or not entities were allowed to call into services, I spent weeks searching for sample applications that modeled simple domains, I spent months figuring out how I could break the aggregate root pattern. These are all common stages that DDD newbies progress through, and they’re all pretty much irrelevant to DDD.
Domain-Driven Design newbies tend to focus on the details of the mechanics of DDD rather than focussing on the essence, “tackling complexity in the heart of software.” When we ignore the essence and focus on the mechanics, the mechanics feel very cumbersome and many people get frustrated by the complexity that they feel DDD has added, exactly the opposite effect that was desired.
This talk will emphasize the parts of Domain-Driven Design that I find are the most valuable. By focusing on these essential elements, the mechanics become more natural and have their intended effect of making complex logic more easily represented in code. If you’re interested in hearing more, please join us on July 7th 2010 at the BCIT Burnaby campus for a jam packed evening of all things DDD. More details here: http://www.netbc.ca/DNCal/EventDetail.aspx?date=2010/07/07