Book Summary: Patterns of Enterprise Application Architecture
Tags: webdev, softwaredevelopment, softwareengineering, programming
Published: 2023-05-16 11:02:30

---
title: Book Summary: Patterns of Enterprise Application Architecture
published: true
date: 2023-04-27 02:48:29 UTC
tags: webdev,softwaredevelopment,softwareengineering,programming
canonical_url: https://fagnerbrack.com/book-summary-patterns-of-enterprise-application-architecture-93c7b0933ea0
---

#### by Martin Fowler

“Patterns of Enterprise Application Architecture” presents a collection of design patterns and best practices for developing enterprise-level applications. The book focuses on addressing common architectural challenges and providing solutions that promote scalability, maintainability, and flexibility.

![](https://cdn-images-1.medium.com/max/798/1*SMszsJCyHK27P9kRYodYgg.jpeg)

The most valuable points from the book are:

#### Layering and organization

Fowler emphasizes the importance of organizing code into distinct layers, such as presentation, domain, and data source, to improve maintainability and separation of concerns.

For example, a developer creates a three-tier architecture with separate layers for the user interface, business logic, and database access, enabling easier maintenance and independent updates.

#### Domain logic patterns

The book describes several patterns for implementing domain logic, including Transaction Script, Domain Model, and Table Module, each with its own advantages and trade-offs.

For example, a developer chooses the Domain Model pattern to represent complex business logic, creating a rich object model with clearly defined relationships and responsibilities.

#### Data source architectural patterns

Fowler presents patterns for managing access to data sources, such as Table Data Gateway, Row Data Gateway, and Active Record, helping developers handle data access more efficiently and consistently.

For example, a developer implements the Active Record pattern, where each object in the system corresponds to a row in the database and includes methods for retrieving, updating, and deleting data.

#### Object-relational mapping patterns

The book covers patterns for mapping between object-oriented code and relational databases, including patterns like Lazy Load, Identity Map, and Unit of Work, to simplify persistence and improve performance.

For example, a developer uses the Lazy Load pattern to defer loading related data from the database until it is actually needed, reducing unnecessary data retrieval and improving performance.

#### Web presentation patterns

Fowler introduces patterns for structuring web applications and handling user interactions, such as Model-View-Controller (MVC), Page Controller, and Front Controller.

For example, a developer adopts the MVC pattern for a web application, separating concerns between the user interface, data model, and control flow, resulting in a more maintainable and scalable application.

#### Distribution patterns

The book discusses patterns for designing distributed systems, including Remote Facade, Data Transfer Object, and Service Layer, to help developers build scalable and efficient distributed applications.

For example, a developer implements a Service Layer to encapsulate complex business logic and provide a consistent API for clients, simplifying integration and future enhancements.

By studying and applying the patterns and best practices presented in “Patterns of Enterprise Application Architecture,” developers can build more robust, scalable, and maintainable enterprise applications, better equipped to handle the unique challenges and complexities of enterprise-level systems.

However, many of those patterns do not apply to every product domain. It's always better to look at the problem and its constraints and find the best solution without trying to fit a pattern into it.

See also [Cargo Cult Programming](https://en.wikipedia.org/wiki/Cargo_cult_programming).

Thanks for reading. If you have feedback, contact me on [Twitter](https://twitter.com/FagnerBrack), [LinkedIn](https://www.linkedin.com/in/fagnerbrack/) or [Github](http://github.com/FagnerMartinsBrack).