I have a hate/love relationship with IT books. Really. On one hand, I love to read them. On the other, when they’re good enough, I feel compelled to blog about them. And it bugs me so much I’ve to do it before being totally free for some other books. As such, let’s speak of Patterns of Enterprise Application Architecture, by Martin Fowler.
As said in the title, the book is all about enterprise patterns and actually does it very well. Indeed, crazily enough, there’s more in IT than just the Gang of Four patterns… Stuff like optimistic (offline) locking, the Active Record pattern, Gateway and way more.
The book is divided in 2 parts: first Martin walks over what he calls "The Narratives". There the stage is set, and the general issues are introduced for the reader to get a proper overview and understanding. Layering, mapping aspects, transactions isolation levels, ACID implications, session, remoting… All these concepts are nicely put together.
Then each pattern is seen in details: how it works, when to use it and some examples (mostly in Java, but C# and maybe some others are also covered). The presentations are well done, presenting pros and cons as well as the various way to implement each of the patterns.
The book shows hardly its age, having been written in 2002. For example, Dependency Injection isn’t spoken of. Similarly, at the time, XML was fancy, so Martin Fowler speaks of it several times, which is funny in retrospective. Still, most of the patterns are still relevant and are important to know, so it doesn’t matter.
In the end, I wish I had read this book (or learned its content) when doing my Computer Science Degree. Indeed, since, I’ve come to know them, but it’s really because I’m interested in the topic. Yet they are of the uttermost importance for anyone in the field. They should be basic knowledge, in order to have a better understanding of the problems at hand, communicate properly between practitioners of the art and not reinventing the wheel .
Furthermore, the extensive coverage of the book should still teach some stuff to most of us.
For example, Kent Beck at some point speaks of remote computing, saying that remote interfaces tend to be coarse grained, whereas local ones are fine grained. Indeed, when going over the network one wants to have as few calls as possible, whereas locally one wants clear intentions and fine control. While obvious, I wasn’t so aware that one interface would be at pain to serve both purposes.
I also loved Martin Fowler First Law of Distributed Object Design: Don’t distribute your objects!
Still, I’m only scratching the surface of this 500+ pages. Martin Fowler was nice enough to provide an online Catalog of Patterns of Enterprise Application Architecture, which should help to get a better view of the book’s content. Since the book publication, a new pattern was also made available online, the Domain Event concept, which is worth looking at.
One more thing: the book is part of the "Martin Fowler Signature Book" series, and thus has a proper hard cover and a nice red bookmark fabric. Cosy and very useful
To sum up, very nice book to get quite some overview of the general concepts at play in enterprise architecture. Almost a must read actually.
I stop here otherwise I fear I’ll write more than there’s in the book