Patterns of Enterprise Application Architecture (PEAA) is Martin Fowler’s 2002 catalog of patterns for building enterprise applications. It groups them into domain logic, data source, object-relational, web presentation, distribution, offline concurrency, session state, and base patterns — among them Transaction Script, Domain Model, Active Record, Data Mapper, Unit of Work, and Repository. Many of these patterns are now implemented by common frameworks.
Patterns of Enterprise Application Architecture (PEAA)
Details
- Full Name
-
Patterns of Enterprise Application Architecture according to Martin Fowler
- Also known as
-
Fowler patterns, PEAA patterns, Enterprise patterns
Core Concepts:
- Domain Logic Patterns
-
Transaction Script, Domain Model, Table Module, Service Layer
- Data Source Architectural Patterns
-
Table Data Gateway, Row Data Gateway, Active Record, Data Mapper
- Object-Relational Behavioral Patterns
-
Unit of Work, Identity Map, Lazy Load
- Object-Relational Structural Patterns
-
Identity Field, Foreign Key Mapping, Association Table Mapping, Dependent Mapping, Embedded Value, Serialized LOB, Single Table Inheritance, Class Table Inheritance, Concrete Table Inheritance
- Object-Relational Metadata Mapping Patterns
-
Metadata Mapping, Query Object, Repository
- Web Presentation Patterns
-
Model View Controller, Page Controller, Front Controller, Template View, Transform View, Two Step View, Application Controller
- Distribution Patterns
-
Remote Facade, Data Transfer Object
- Offline Concurrency Patterns
-
Optimistic Offline Lock, Pessimistic Offline Lock, Coarse-Grained Lock, Implicit Lock
- Session State Patterns
-
Client Session State, Server Session State, Database Session State
- Base Patterns
-
Gateway, Mapper, Layer Supertype, Separated Interface, Registry, Value Object, Money, Special Case, Plugin, Service Stub, Record Set
- Key Proponent
-
Martin Fowler ("Patterns of Enterprise Application Architecture", 2002)
When to Use:
-
Designing complex enterprise applications with data persistence
-
Building layered architectures with clear separation of concerns
-
Working with object-relational mapping and database interactions
-
Designing web applications with proper presentation layer patterns
-
Managing distributed system communication
-
Handling concurrency in multi-user enterprise systems
-
Creating maintainable and testable enterprise code
Related Anchors:
-
Domain-Driven Design - Complements PEAA with domain modeling approach
-
Hexagonal Architecture - Architectural style emphasizing ports and adapters
-
Clean Architecture - Layered architecture pattern with dependency rules
Current Status:
-
The prior reproduces the 2002 catalog (Active Record, Data Mapper, Unit of Work, Repository …) as hand-rolled patterns; Fowler himself notes "many patterns are now implemented by common frameworks" while maintaining they are "still relevant today" (P of EAA book page)
-
The online catalog is content-unchanged since its "original 2003 publication", and the planned follow-up volumes (eaaDev) have been "pretty much frozen" since 2006 — the catalog reflects the J2EE/.NET era, not current distributed and frontend-heavy practice