Patterns of Enterprise Application Architecture
The book is honest and upfront about grey areas in addition to (nearly) hard and fast rules. Fifty one patterns are described in an organized fashion, grouped by theme. The first section gives an overall narrative tying together the concepts while the remaining 4/5 of the book is devoted to short chapters on each pattern. In this way the book works well on two levels, as a reference and a tutorial. Code examples are given in Java and C# where most appropriate for the given pattern, however most examples use Java.
Much of the book centers around the task of Object-Relational mapping between the in-memory model of an application and the datastore. There are a surprising number of design choices in enterprise systems and I often found myself nodding in agreement with the logic behind the patterns. After establishing that mixing presentation and domain logic is a mistake worthy of horse-whipping, a plethora of smart alternatives are given.
I found this to be one of the more enlightening books I've read, and place it alongside Effective Java and Design Patterns Explained as canonical books for the Java developer. I'm a fan of the O'Reilly Java series, which excels in the HOW-TO category of books, but I've recently taken to the Addison-Wesley publications, which deal less with the nuts and bolts, and for lack of a better word are more like WHY-TO books.
Aside from being an excellent book, I also liked that it is hardbound and includes a bookmark (simple nylon strap from the binding). This is a fitting presentation for such a quality book.
The only complaint I might have is that sometimes the code examples are a tad brief for my taste. The author is fond of declaring a class as follows:
class ArtistMapper ...
From the UML diagrams provided I was often able to conclude that ArtistMapper extends AbstractMapper or that ArtistMapper implements Mapper, but as I read the examples I yearned for completeness. Two guesses come to mind as for this choice:
- The author explains that the code examples are meant to facilitate understanding, not to provide boilerplate code. Fowler's appreciation for the complexity of software systems leads him to caution the reader to implement the examples without careful consideration to the context in which they are deployed. Partial code examples forces the reader to fill the gaps, and in the process may think more critically about it.
- There is often more than one way to do things, like abstracting an interface in Java. The choice of extending an Abstract class or implementing an interface implies a subtle, but far-reaching, development choice. Similar to the previous point, I think Fowler may want the reader to choose a concrete class implementation appropriate for his or her application.
You can purchase Patterns of Enterprise Application Architecture from bn.com. Slashdot welcomes readers' book reviews -- to see your own review here, read the book review guidelines, then visit the submission page.
Hmm, this review lacks meat. The book is about patterns and the reviewer says the author has good ones. Well how about some examples of these patterns, esp one or two that are non trivial (and thus make having a book like this worthwhile). Since this book is obviously geared towards those with a fairly good level of experience/knowledge, that audience would want to see some real meat in the review, vs "it has good stuff, trust me". And no, a book that states "separate presentation and domain logic" does not automatically qualify it as a good book as this is "Programming 101" stuff.
Minor performance optimization:
Since you have already read an enterprise pattern book, you already know the jargon. The optimized last steps are:
4) Keep promising success until 90% of the effort is expended
5) change jobs
6) Go to 3)
The key is that, unfortunately, you must keep learning new jargon and thus buy new books.
So if you stand up now and say: "model-view-controller" no one will give you the time of day.
The key to jargon is that it must sound compelling but unknown to the audience.
enterprise imkplies a certian size and expected reliability.
Business software is specific to a task, not the size of the tsck.
Example:
A database that can handle 100,000 transactions an hour, with 99.999 up time is 'enterprise' level.
an application that tells you what is in your warehouse, business software. If that same software was called enterprise, you would expected it to have 99.999 uptime, and track many thousands, if not millions, of pieces of inventory scattered in warehouses around the globe.
this is why I laugh when Microsoft calls SQLserver 'Enterprse ready'. it is not.
The Kruger Dunning explains most post on