Published: 30 Sep 2007
By: Alessandro Gallo

Review of the book: Patterns of Enterprise Application Architecture (PoEAA).

Written by: Martin Fowler
Pages: 560
Publisher: Addison Wesley
ISBN: 0321127420







Without a doubt, patterns play a fundamental role in designing robust software that is easy to develop and maintain. The concept of pattern (as a core solution for a recurring problem in application design) gained most of its fame thanks to the Gang of Four's book. Patterns have proven to be an invaluable aid for choosing development strategies that are less error prone and faster to implement and test.

Many of the books written by Martin Fowler are dedicated to patterns. The book that I'm going to review deals with patterns for building enterprise applications.

Why PoEAA?

Martin Fowler defines an enterprise application as a data-centric application that is required to scale very well. Often, enterprise applications have a web-based User Interface and use a database as the data store. For a quick example of an enterprise application, you can browse to Amazon (

The book is logically structured in two parts. In the first one, Fowler introduces us to patterns and explains why they must be part of the skills of any programmer who's going to face the design and development of an enterprise application. In the second part, the author presents a vast catalog of patterns for the architecture of an enterprise application.

Let's see if this book meets the high quality standards that Martin Fowler is used to achieving with his books. I will evaluate both the quality of his research and the way the results are presented on paper.

Another milestone

If you've read some of the books written by Martin Fowler, you are already aware of the great contribute they provide to the research in the object-oriented programming field. PoEAA is one of the milestones.

In the first part of the book, Fowler discusses enterprise applications in general terms, underlining the importance of layering and focusing on the three main areas where architects have to make the most important choices: the User Interface (or Presentation), the Business Logic and the Data Source. Before delving into patterns, Fowler covers some of the most common scenarios in enterprise applications: domain logic, data mapping, concurrency, statefulness and distributed applications. This great introduction - which spans the first 8 chapters - is a complete overview of the requirements of large applications.

Next, the author dissects the architecture by providing patterns for layered enterprise applications. Patterns are catalogued using a very compact and scannable schema. After the pattern's name (which, as stressed by the author, is important to acquire a correct terminology) follows a definition and a brief description of the task that the pattern tries to solve. When needed, UML diagrams are used to clarify the entities involved in the most complex patterns. Finally, a discussion on a potential implementation follows. Since patterns are not algorithms but rather strategies, don't expect to find a list of steps to perform. Instead, you'll find a well structured discussion on how to implement the correct strategy that leads to an elegant solution. Code samples are provided in Java and, for some of the patterns, in C#. Since the whole concept of patterns is mainly technology-agnostic, code is based on simple examples that can be understood by every developer, independently from their language of choice.


Despite what Fowler says, the patterns presented in this book can be appreciated also by developers who aren't going to develop enterprise applications. I believe reading this book can be a really enlightenment experience for many architects and developers that want to understand how modern applications (even the small ones) can be well designed. Many of the patterns presented in this book are recurring in web applications and in web server technologies such as ASP.NET. Furthermore, these patterns can be of great help in gaining a deep understanding of the code that we read and write every day. This book is a must-have for architects and I highly recommend it to any developers. Five stars out of five.

<<  Previous Article Continue reading and see our next or previous articles Next Article >>

About Alessandro Gallo

Alessandro "Garbin" Gallo is a Microsoft MVP in the Visual ASP/ASP.NET category and a .NET developer/consultant. He is a contributor for the Ajax Control Toolkit project, owned by Microsoft. Alessandro won the Grand Prize at the "Mash-it-up with ASP.NET AJAX" contest held by Micr...

This author has published 23 articles on DotNetSlackers. View other articles or the complete profile here.

Other articles in this category

Android for .NET Developers - Location and Maps
In Windows Phone and iOS getting the current position of the device in terms of latitude and longitu...
Android for .NET Developers - Using Web Views
In this article, I'll show a native app that contains a web-based view. The great news is that HTML ...
Android for .NET Developers - Building a Twitter Client
In this article, I'll discuss the features and capabilities required by an Android application to ta...
Developing a Hello World Java Application and Deploying it in Windows Azure - Part II
In this article we will see the steps involved in deploying the WAR created in the first part of thi...
Ref and Out (The Inside Story)
Knowing the power of ref and out, a developer will certainly make full use of this feature of parame...

You might also be interested in the following related blog posts

What is Softwaremaker doing now ? read more
September's Toolbox Column Now Online read more
August's Toolbox Column Now Online read more
Updated SilverTwit Code for MSDN Magazine read more
Sneak Peek at our book Beginning ASP.NET MVC 1.0 read more
How do ASP.NET Application_ Events Work read more
Intersoft Solutions Releases WebUI Studio 2009 The Worlds Most Innovative Web Development Toolkit read more
The Technology Post for May 18th read more
Technology Related Links for May 12th read more
Principles as enterprise architecture outcome read more


Subject Author Date
placeholder I had a colleague... Granville Barnett 10/1/2007 1:12 PM
RE: I had a colleague... Sonu Kapoor 10/1/2007 1:17 PM
placeholder RE: RE: I had a colleague... Granville Barnett 10/1/2007 4:02 PM
Refactoring Derek Smyth 10/14/2007 9:28 AM

Please login to rate or to leave a comment.