Skip navigation.

What Happened to Good, Clean, Simple Hardware?All recent postsConversion to Web Application Project Resets AutoEventWireup

Book Review: Applying Domain-Driven Design and Patterns

I’ve finished reading Jimmy Nilsson’s recent book Applying Domain-Driven Design and Patterns: With Examples in C# and .NET.

Applying DDD and PatternsMy first impression is that the book lacks focus. Jimmy talks about a wide range of topics: coming up with a Domain Model, fanatically focusing on its clarity, refactoring, writing unit tests, etc. But, all in all, there’s no “big picture.” Even though each chapter builds on preceding material, there’s no sense of strong cohesion.

I’m willing to cut Jimmy some slack here because it’s still very helpful to see challenges with Test-Driven Design (TDD), for example, in the context of developing a Domain Model. At the end of the book, though, you don’t get a “finished sample solution”—the book sort of falls off the cliff there.

Jimmy also invited a number of other people to write a section or two, which adds diversity of opinions and insight. I’m particularly grateful to Mats Helander for his interesting essays on Presentation Layer and Service Layer.

Recommendations

I wholeheartedly recommend Jimmy’s book. I do think it teaches many valuable concepts of good architecture. I also strongly suggest you first read Domain-Driven Design by Eric Evans. Jimmy has a lot of references to Eric’s book, so you might end up wondering what all this Ubiquitous Language, Bounded Context and Repositories business is all about.

It will also behoove you to read Martin Fowler’s Patterns of Enterprise Application Architecture (a.k.a PoEAA) as Jimmy references this work a lot as well. If you want to develop high-quality software, the PoEAA book is a must-read anyway, whether you adhere to Domain-Driven Design or not.

Jimmy has a conversational style of writing—similar to that of Martin Fowler—which makes it easy to follow. In contrast, Eric’s Domain-Driven Design is quite dry for my taste and suffers from high-level, somewhat “academic” language.

Comments

Comment permalink 1 Eric |
Honestly, I thought the book was a waste of time. I liked his earlier .NET book. I felt it was more practical. The new book gave you a few glimpses of hope and then left you stranded on the outskirts of town with no money for a ride back in.

For the last 5 years, I've been trying to buy into this whole 'rich domain object' model as a way of programming web applications. To be honest, I've had a hard time swallowing the pill.

A lot of applications have very simple business logic. Couple that with a session-less platform (ASP.NET) and I think in most cases you're better of using the Transaction Script pattern for domain logic and the Recordset pattern (or simple domain objects -- Data Transfer Objects) for retrieving and displaying data.

NHibernate is extremely verbose in my opinion and not exactly 'transparent'. Which brings me to the point... is anyone even working on that project anymore? I've seen so many open source projects (and ports of Java OS projects) that have been left for dead.

I wonder what LINQ and ADO.NET 3 will bring? I've seen a few documents and examples, but they usually only ever cover the ULTRA simple examples (no/simple relationships, loading the whole object, etc).

I thought a good article on OR mapping was: source
Comment permalink 2 Eric |
If you are a fan of the MVP pattern, you might fancy this article on codeproject: http://www.codeproject.com/useritems/ModelViewPresenter.asp#Downloads

Emails and Notifications

Would you like to be notified when somebody responds to this post?  Would you like to have these comments emailed to you?

TrackBacks

Sorry, TrackBacks are not allowed.

Submit your comment

Please enter only text since all HTML tags except hyperlinks will be stripped. Hyperlinks will become live links. Any comments with flaming or offensive language will be deleted. Be courteous to other posters. Thank you.

Your name (required):
Your email (optional):
Your site's URL (optional):
Enter this number
Type in the number above:
Comment (required):