Martin Fowler 2003

From CSSEMediaWiki
Revision as of 03:10, 23 September 2008 by Warwick Irwin (Talk | contribs)
Jump to: navigation, search


Martin Fowler's architectural patterns book

Patterns of enterprise application architecture by Martin Fowler, 2003.

This is a must-have book for anyone working on "enterprise applications", which used to be known as "information systems", or (for old farts) "data processing". The patterns cover topics such as complex data, concurrency, persistence, distribution, and user interfaces.

The book is in two parts: Part 1 is a narrative that motivates and explains the patterns; part 2 is a catalogue.

The UML diagrams are [[1]].

Domain logic patterns

TransactionScriptPattern Organizes business logic by procedures where each procedure handles a single request from the presentation.
DomainModelPattern An object model of the domain that incorporates both behavior and data.
TableModulePattern A single instance that handles the business logic for all rows in a database table or view.
ServiceLayerPattern Defines an application's boundary with a layer of services that establishes a set of available operations and coordinates the application's response in each.

Data source architectural patterns

TableDataGatewayPattern An object that acts as a Gateway to a database table. One instance handles all the rows in the table.
RowDataGatewayPattern An object that acts as a Gateway to a single record in a data source. There is one instance per row.
ActiveRecordPattern An object that wraps a row in a database table or view, encapsulates the database access, and adds domain logic on that data.
DataMapperPattern A layer of Mappers that moves data between objects and a database while keeping them independent of each other and the mapper itself.

Object-Relational Behavioral Patterns

UnitOfWorkPattern Maintains a list of objects affected by a business transaction and coordinates the writing out of changes and the resolution of concurrency problems.
IdentityMapPattern Ensures that each object gets loaded only once by keeping every loaded object in a map. Looks up objects using the map when referring to them.
LazyLoadPattern An object that doesn't contain all of the data you need but knows how to get it.

Object-Relational Structural Patterns

IdentityFieldPattern Saves a database ID field in an object to maintain identity between an in-memory object and a database row.
ForeignKeyMappingPattern Maps an association between objects to a foreign key reference between tables.
AssociationTableMappingPattern Saves an association as a table with foreign keys to the tables that are linked by the association.
DependentMappingPattern Has one class perform the database mapping for a child class.
EmbeddedValuePattern Maps an object into several fields of another object's table.
SerializedLobPattern Saves a graph of objects by serializing them into a single large object (LOB), which it stores in a database field.
SingleTableInheritancePattern Represents an inheritance hierarchy of classes as a single table that has columns for all the fields of the various classes.
ClassTableInheritancePattern Represents an inheritance hierarchy of classes with one table for each class.
ConcreteTableInheritancePattern Represents an inheritance hierarchy of classes with one table per concrete class in the hierarchy.
InheritanceMappersPattern A structure to organize database mappers that handle inheritance hierarchies.

Object-Relational Metadata Mapping Patterns

MetadataMappingPattern || Holds details of object-relational mapping in metadata.
QueryObjectPattern An object that represents a database query.
RepositoryPattern Mediates between the domain and data mapping layers using a collection-like interface for accessing domain objects.

Web Presentation Patterns

ModelViewControllerPattern Splits user interface interaction into three distinct roles.
PageControllerPattern An object that handles a request for a specific page or action on a Web site.
FrontControllerPattern A controller that handles all requests for a Web site.
TemplateViewPattern Renders information into HTML by embedding markers in an HTML page.
TransformViewPattern A view that processes domain data element by element and transforms it into HTML.
TwoStepViewPattern Turns domain data into HTML in two steps: first by forming some kind of logical page, then rendering the logical page into HTML.
ApplicationControllerPattern A centralized point for handling screen navigation and the flow of an application.

Distribution Patterns

RemoteFacadePattern Provides a coarse-grained facade on fine-grained objects to improve efficiency over a network.
DataTransferObjectPattern An object that carries data between processes in order to reduce the number of method calls.

Offline Concurrency Patterns

OptimisticOfflineLockPattern Prevents conflicts between concurrent business transactions by detecting a conflict and rolling back the transaction.
PessimisticOfflineLockPattern Prevents conflicts between concurrent business transactions by allowing only one business transaction at a time to access data.
CoarseGrainedLockPattern Locks a set of related objects with a single lock.
ImplicitLockPattern Allows framework or layer supertype code to acquire offline locks.

Session State Patterns

ClientSessionStatePattern Stores session state on the client.
ServerSessionStatePattern Keeps the session state on a server system in a serialized form.
DatabaseSessionStatePattern Stores session data as committed data in the database.

Base Patterns

GatewayPattern An object that encapsulates access to an external system or resource.
MapperPattern An object that sets up a communication between two independent objects.
LayerSupertypePattern A type that acts as the supertype for all types in its layer.
SeparatedInterfacePattern Defines an interface in a separate package from its implementation.
RegistryPattern A well-known object that other objects can use to find common objects and services.
ValueObjectPattern A small simple object, like money or a date range, whose equality isn't based on identity.
MoneyPattern Represents a monetary value.
SpecialCasePattern A subclass that provides special behavior for particular cases.
PluginPattern Links classes during configuration rather than compilation.
ServiceStubPattern Removes dependence upon problematic services during testing.
RecordSetPattern An in-memory representation of tabular data.

Update

Fowler is working on a new edition, which will merge in updated ideas from his analysis patterns book, MartinFowler1997 * See [enterprise architecture].

Personal tools