I recently finished reading Design Patterns Explained. I’m not really going to do a full review of the book, but there were some helpful parts that seemed worth pointing out.
In general, most of the book didn’t seem all that useful. In particular, the chapters focusing on specific design patterns were the least appealing. I can see situations where the general approach of a design pattern might be applicable, but specifics of a particular problem at hand likely would dictate a simpler variation of the pattern that could be derived without needing to specifically think about patterns.
However, there were two particular chapters that I liked a lot and thought were really valuable.
The first is chapter 8 “Expanding Our Horizons”. There is lots of good discussion in this chapter, but the diagram showing how commonality and variability analysis relate to conceptual, specification, and implementation perspectives was a big highlight. Thinking about a problem from the “conceptual” perspective helps me stay more focused in the problem domain when programming, and the other two perspectives help bridge the gap between the problem domain and crafting solid code.
The next useful chapter was chapter 16 “The Analysis Matrix”. Extending the ideas behind commonality and variability analysis, this chapter describes a practical, concrete tool that can easily be used to more clearly see commonalities and variations within a problem. One particular benefit of this approach that I like is that I think it can be helpful to make sure you don’t overdesign flexibility into your program – the variations you actually need are right there in the matrix (table).
There are other chapters in the book that may be useful. However, most of the topics they cover were covered in the two chapters outlined above, and those two chapters do a great and better job of explaining the topics.
So while most of Design Patterns Explained didn’t seem too useful to me, I highly recommend checking out the two chapters mentioned above if you get the chance. Definitely at least worth contemplating to see if they might be useful in certain situations.