[Note: I was going to call this post How to Fail with Domain Driven Design, but that just sounded too pessimistic.]
I’ve been developing business applications on the Microsoft platform since the mid 1990s. The years since then have involved a continual process of learning to be more effective in architectural approach. Along the way, there have been key points where I made leaps forward. Two such examples include object-orientation in the 90s and my first Web service in 2000 (anyone remember SOAP Toolkit2?).
Each of these leaps forward also came with some initial stumbles as I grappled with the promising new approach. Pushing the envelope of productivity means trying new things. New things always create risk. Software is hard. The path of progress in software is never a straight line (unless you are creating commodity level software). However, stumbling when taking on new approaches can be minimized if you learn from other peoples mistakes instead if just your own.
Another big leap forward for me started with my reading of Domain Driven Design in 2005. Since that time, I have been putting DDD principles into practice. I have learned a lot-much of it by my own mistakes. What I offer here are some concrete examples of mistakes I made. I’ll show the mistake I made and how I later fixed it so you can compare and contrast the before and after. Sometimes I learn a pattern best by seeing examples of its anti-patterns. I hope these articles will help you create better software and add to the growing awareness of DDD.
- Not accounting for command and queries as separate concerns.
- Not getting the whole team educated on DDD early enough.
- Not taking bounded contexts seriously.
- Allowing implementation decisions to drive the domain model.
The above list will serve as the table of contents for the series. I’ll enable the links as I write the articles. I’ll probably add an article or two to the list as I go.
Looking forward to this series.
Looking forward to this as well. Especially since I lived most of it 🙂
Thanks for sharing your thoughts. It is amazing, how we ran into the exact same issues on our project (using NServiceBus, NHibernate and DDD) , and fixed it in similar ways ! Coincidentally, the timing is also the same. We were working through the refactoring sessions around April/May 2011.