Wednesday, July 29, 2009

Domain-Driven Design

See Domain-Driven Design at its new home on bradley-holt.com.

I am currently reading Eric Evans' Domain-Driven Design book. Having read most of the book I can say that his presentations on Putting the Model to Work and Strategic Design are an amazingly concise overview of the book's content (note that InfoQ provides slides below the videos). If you've been interested in reading the book but just haven't had time yet then I'd recommend watching these two presentations.

I have a lot of experience building web applications that separate business logic from presentation and have been using Zend Framework's model–view–controller (MVC) components for over two years now. This has certainly helped make web applications I work on more maintainable. However, creating effective models (the "M" in "MVC") has always been difficult (this has nothing to do with Zend Framework and has everything to do with the difficulty of modeling in general). The Zend Framework team has been relatively quiet on models since modeling tends to be specific to your application's domain (although Matthew Weier O'Phinney recently gave a great webcast and presentation on modeling in Zend Framework).

The Domain-Driven Design book has helped make a lot of things "click" for me. It drives home the point that modeling is a domain-specific task and that the complexity is usually in the domain, not the technical aspects of your project. If you think the complexity is in the technology then you should question your choice of tools (in my opinion) but in this case perhaps domain-driven design isn't right for you. The book provides many patterns that help keep the focus on the domain. Arguably the most important of these patterns is the Ubiquitous Language which is "a language structured around the domain model and used by all team members to connect all the activities of the team with the software." Other important patterns include Entities, Value Objects, Services, Repositories and Factories.

If effective modeling has been something that you've struggled with then I'd urge you to check out Eric Evans' presentations and then read his Domain-Driven Design book.

1 comment:

Jani said...

Nice presentations, going to share them at work. I've read the Domain-Driven Design book myself, but I'm not sure if my coworkers have.