I'm surprised to see here that the first edition, which I just finished reading after letting it collect dust for several years, is still the current edition on the market. Seven years in the software development industry is a long time, and I feel that this book could use some refactoring. (I couldn't resist.) For example, the book refers to a "Plugin" pattern because "dependency injection," an industry-wide practice of decoupling interfaces from implementations and configuring them at runtime, hadn't become a common term at the time the book was written. The "service stub" pattern, one of whose benefits is described as enhanced testing, is now better known as mock objects, and this book doesn't mention the tools and libraries that have sprung up around generating mock objects to facilitate more insular unit testing. Finally, when discussing object-to-relational-database mapping patterns, the book makes recommendations about "buying" one but makes no mention of solid open source solutions available like Hibernate.
The book's loosely edited style and almost chatty, informal delivery prevents it from attaining the academic perfection that the original "instant classic" Gang of Four design patterns book earned. There is frequent phrasing like "my preference," "here at ThoughtWorks," and (my favorite) "at the moment I don't have a strong opinion either way." Martin Fowler is cool, and is a renowned software personality, which makes it easy to tolerate the familiarity, but at times I wished for slightly more rigorous editing.
The book's examples are a blend of Java and C#, and while this works fairly well to present a language-agnostic view of the patterns, this book doesn't avoid an occasional platform-specific side trail (like the judicious use of Enterprise Javabeans vs. plain Java objects). This sort of indiscretion has often marred patterns books that would otherwise have achieved more timelessness (for example, the book "Pattern Hatching," a followup to the classic Design Patterns books, spent an entire thick middle chapter dealing with workarounds to problems that occur only in C++).
Some of the patterns in this book would not have been hard to come up with: if you've built a vertical slice of a multitier enterprise application, you've almost certainly developed some of these patterns on your own. The value of patterns literature, of course, is in how it increases our shared design vocabulary, and to the extent that it helps us know what we mean when someone talks about "doing it with a Table Data Gateway," this book is a worthy addition to the literature. Overall, though, for me the book was less a series of profound "aha!" experiences and more of a catalog of "so that's what that's called" moments. A decent effort, but the new reader should be aware that it would benefit from some updates.