Martin Fowler
Patterns of Enterprise Applications Architecture
Mitarbeit:Rice, David; Foemmel, Matthew
Martin Fowler
Patterns of Enterprise Applications Architecture
Mitarbeit:Rice, David; Foemmel, Matthew
- Gebundenes Buch
- Merkliste
- Auf die Merkliste
- Bewerten Bewerten
- Teilen
- Produkt teilen
- Produkterinnerung
- Produkterinnerung
This volume is a handbook for enterprise system developers, guiding them through the intricacies and lessons learned in enterprise application development. It provides proven solutions to the everyday problems facing information systems developers.
Andere Kunden interessierten sich auch für
- Gareth JamesAn Introduction to Statistical Learning77,99 €
- Neal FordSoftware Architecture: The Hard Parts66,99 €
- Jon SteinhartThe Secret Life of Programs31,99 €
- Jake VanderplasPython Data Science Handbook59,99 €
- Scott MeyersEffective Modern C++43,99 €
- Design Patterns39,99 €
- Chip HuyenDesigning Machine Learning Systems51,63 €
-
-
-
-
-
-
-
-
-
-
-
-
-
This volume is a handbook for enterprise system developers, guiding them through the intricacies and lessons learned in enterprise application development. It provides proven solutions to the everyday problems facing information systems developers.
Produktdetails
- Produktdetails
- The Addison-Wesley Signature Series
- Verlag: ADDISON-WESLEY LONGMAN, AMSTERDAM
- Seitenzahl: 533
- Erscheinungstermin: November 2002
- Englisch
- Abmessung: 192mm x 236mm x 38mm
- Gewicht: 1168g
- ISBN-13: 9780321127426
- ISBN-10: 0321127420
- Artikelnr.: 11151171
- Herstellerkennzeichnung
- Books on Demand GmbH
- In de Tarpen 42
- 22848 Norderstedt
- info@bod.de
- 040 53433511
- The Addison-Wesley Signature Series
- Verlag: ADDISON-WESLEY LONGMAN, AMSTERDAM
- Seitenzahl: 533
- Erscheinungstermin: November 2002
- Englisch
- Abmessung: 192mm x 236mm x 38mm
- Gewicht: 1168g
- ISBN-13: 9780321127426
- ISBN-10: 0321127420
- Artikelnr.: 11151171
- Herstellerkennzeichnung
- Books on Demand GmbH
- In de Tarpen 42
- 22848 Norderstedt
- info@bod.de
- 040 53433511
Martin Fowler is an independent consultant who has applied objects to pressing business problems for more than a decade. He has consulted on systems in fields such as health care, financial trading, and corporate finance. His clients include Chrysler, Citibank, UK National Health Service, Andersen Consulting, and Netscape Communications. In addition, Fowler is a regular speaker on objects, the Unified Modeling Language, and patterns. 0321127420AB07242003
Preface.
Who This Book Is For.
Acknowledgements.
Colophon.
Introduction.
Architecture.
Enterprise Applications.
Kinds of Enterprise Application.
Thinking About Performance.
Patterns.
The Structure of the Patterns.
Limitations of These Patterns.
I. THE NARRATIVES.
1. Layering.
The Evolution of Layers in Enterprise Applications.
The Three Principal Layers.
Choosing Where to Run Your Layers.
2. Organizing Domain Logic.
Making a Choice.
Service Layer.
3. Mapping to Relational Databases.
Architectural Patterns.
The Behavioral Problem.
Reading in Data
Structural Mapping Patterns.
Mapping Relationships.
Inheritance.
Building the Mapping.
Double Mapping.
Using Metadata.
Database Connections.
Some Miscellaneous Points.
Further Reading.
4. Web Presentation.
View Patterns.
Input Controller Patterns.
Further Reading.
5. Concurrency (by Martin Fowler and David Rice).
Concurrency Problems.
Execution Contexts.
Isolation and Immutability.
Optimistic and Pessimistic Concurrency Control.
Preventing Inconsistent Reads.
Deadlocks.
Transactions.
ACID.
Transactional Resources.
Reducing Transaction Isolation for Liveness.
Business and System Transactions.
Patterns for Offline Concurrency Control.
Application Server Concurrency.
Further Reading.
6. Session State.
The Value of Statelessness.
Session State.
Ways to Store Session State.
7. Distribution Strategies.
The Allure of Distributed Objects.
Remote and Local Interfaces.
Where You Have to Distribute.
Working with the Distribution Boundary.
Interfaces for Distribution.
8. Putting it all Together.
Starting With the Domain Layer.
Down to the Data Source.
Data Source for Transaction Script.
Data Source Table Module (125).
Data Source for Domain Model (116).
The Presentation Layer.
Some Technology-Specific Advice.
Java and J2EE.
.NET.
Stored Procedures.
Web Services.
Other Layering Schemes.
II. THE PATTERNS.
9. Domain Logic Patterns.
Transaction Script.
How It Works.
When to Use It.
The Revenue Recognition Problem.
Example: Revenue Recognition (Java).
Domain Model.
How It Works.
When to Use It.
Further Reading.
Example: Revenue Recognition (Java).
Table Module.
How It Works.
When to Use It.
Example: Revenue Recognition with a Table Module (C#).
Service Layer(by Randy Stafford).
How It Works.
When to Use It.
Further Reading.
Example: Revenue Recognition (Java).
10. Data Source Architectural Patterns.
Table Data Gateway.
How It Works.
When to Use It.
Further Reading.
Example: Person Gateway (C#).
Example: Using ADO.NET Data Sets (C#).
Row Data Gateway.
How It Works.
When to Use It.
Example: A Person Record (Java).
Example: A Data Holder for a Domain Object (Java).
Active Record.
How It Works.
When to Use It.
Example: A Simple Person (Java).
Data Mapper.
How It Works.
When to Use It.
Example: A Simple Database Mapper (Java).
Example: Separating the Finders (Java).
Example: Creating an Empty Object (Java).
11. Object-Relational Behavioral Patterns.
Unit of Work.
How It Works.
When to Use It.
Example: Unit of Work with Object Registration (Java) (by David Rice).
Identity Map.
How It Works.
When to Use It.
Example: Methods for an Identity Map (Java).
Lazy Load.
How It Works.
When to Use It.
Example: Lazy Initialization (Java).
Example: Virtual Proxy (Java).
Example: Using a Value Holder (Java).
Example: Using Ghosts (C#).
12. Object-Relational Structural Patterns.
Identity Field.
How It Works.
When to Use It.
Further Reading.
Example: Integral Key (C#).
Example: Using a Key Table (Java).
Example: Using a Compound Key (Java).
Foreign Key Mapping.
How It Works.
When to Use It.
Example: Single-Valued Reference (Java).
Example: Multitable Find (Java).
Example: Collection of References (C#).
Association Table Mapping.
How It Works.
When to Use It.
Example: Employees and Skills (C#).
Example: Using Direct SQL (Java).
Example: Using a Single Query for Multiple Employees (Java) (by Matt
Foemmel and Martin Fowler).
Dependent Mapping.
How It Works.
When to Use It.
Example: Albums and Tracks (Java).
Embedded Value.
How It Works.
When to Use It.
Further Reading.
Example: Simple Value Object (Java).
Serialized LOB.
How It Works.
When to Use It.
Example: Serializing a Department Hierarchy in XML (Java).
Single Table Inheritance.
How It Works.
When to Use It.
Example: A Single Table for Players (C#).
Loading an Object from the Database.
Class Table Inheritance.
How It Works.
When to Use It.
Further Reading.
Example: Players and Their Kin (C#).
Concrete Table Inheritance.
How It Works.
When to Use It.
Example: Concrete Players (C#).
Inheritance Mappers.
How It Works.
When to Use It.
13. Object-Relational Metadata Mapping Patterns.
Metadata Mapping.
How It Works.
When to Use It.
Example: Using Metadata and Reflection (Java).
Query Object.
How It Works.
When to Use It.
Further Reading.
Example: A Simple Query Object (Java).
Repository (by Edward Hieatt and Rob Mee).
How It Works.
When to Use It.
Further Reading.
Example: Finding a Person's Dependents (Java).
Example: Swapping Repository Strategies (Java).
14. Web Presentation Patterns.
Model View Controller.
How It Works.
When to Use It.
Page Controller.
How It Works.
When to Use It.
Example: Simple Display with a Servlet Controller and a JSP View (Java).
Example: Using a JSP as a Handler (Java).
Example: Page Handler with a Code Behind (C#).
Front Controller.
How It Works.
When to Use It.
Further Reading.
Example: Simple Display (Java).
Template View.
How It Works.
When to Use It.
Example: Using a JSP as a View with a Separate Controller (Java).
Example: ASP.NET Server Page (C#).
Transform View.
How It Works.
When to Use It.
Example: Simple Transform (Java).
Two Step View.
How It Works.
When to Use It.
Example: Two Stage XSLT (XSLT).
Example: JSP and Custom Tags (Java).
Application Controller.
How It Works.
When to Use It.
Further Reading.
Example: State Model Application Controller (Java).
15. Distribution Patterns.
Remote Facade.
How It Works.
When to Use It.
Example: Using a Java Session Bean as a Remote Facade (Java).
Example: Web Service (C#).
Data Transfer Object.
How It Works.
When to Use It.
Further Reading.
Example: Transferring Information about Albums (Java).
Example: Serializing Using XML (Java).
16. Offline Concurrency Patterns.
Optimistic Offline Lock (by David Rice).
How It Works.
When to Use It.
Example: Domain Layer with Data Mappers (165) (Java).
Pessimistic Offline Lock (by David Rice).
How It Works.
When to Use It.
Example: Simple Lock Manager (Java).
Coarse-Grained Lock (by David Rice and Matt Foemmel).
How It Works.
When to Use It.
Example: Shared Optimistic Offline Lock (416) (Java).
Example: Shared Pessimistic Offline Lock (426) (Java).
Example: Root Optimistic Offline Lock (416) (Java).
Implicit Lock (by David Rice).
How It Works.
When to Use It.
Example: Implicit Pessimistic Offline Lock (426) (Java).
17. Session State Patterns.
Client Session State.
How It Works.
When to Use It.
Server Session State.
How It Works.
When to Use It.
Database Session State.
How It Works.
When to Use It.
18. Base Patterns.
Gateway.
How It Works.
When to Use It.
Example: A Gateway to a Proprietary Messaging Service (Java).
Mapper.
How It Works.
When to Use It.
Layer Supertype.
How It Works.
When to Use It.
Example: Domain Object (Java).
Separated Interface.
How It Works.
When to Use It.
Registry.
How It Works.
When to Use It.
Example: A Singleton Registry (Java).
Example: Thread-Safe Registry (Java) (by Matt Foemmel and Martin Fowler).
Value Object.
How It Works.
When to Use It.
Money.
How It Works.
When to Use It.
Example: A Money Class (Java) (by Matt Foemmel and Martin Fowler).
Special Case.
How It Works.
When to Use It.
Further Reading.
Example: A Simple Null Object (C#).
Plugin (by David Rice and Matt Foemmel).
How It Works.
When to Use It.
Example: An Id Generator (Java).
Service Stub (by David Rice).
How It Works.
When to Use It.
Example: Sales Tax Service (Java).
Record Set.
How It Works.
When to Use It.
References
Index. 0321127420T10162002
Who This Book Is For.
Acknowledgements.
Colophon.
Introduction.
Architecture.
Enterprise Applications.
Kinds of Enterprise Application.
Thinking About Performance.
Patterns.
The Structure of the Patterns.
Limitations of These Patterns.
I. THE NARRATIVES.
1. Layering.
The Evolution of Layers in Enterprise Applications.
The Three Principal Layers.
Choosing Where to Run Your Layers.
2. Organizing Domain Logic.
Making a Choice.
Service Layer.
3. Mapping to Relational Databases.
Architectural Patterns.
The Behavioral Problem.
Reading in Data
Structural Mapping Patterns.
Mapping Relationships.
Inheritance.
Building the Mapping.
Double Mapping.
Using Metadata.
Database Connections.
Some Miscellaneous Points.
Further Reading.
4. Web Presentation.
View Patterns.
Input Controller Patterns.
Further Reading.
5. Concurrency (by Martin Fowler and David Rice).
Concurrency Problems.
Execution Contexts.
Isolation and Immutability.
Optimistic and Pessimistic Concurrency Control.
Preventing Inconsistent Reads.
Deadlocks.
Transactions.
ACID.
Transactional Resources.
Reducing Transaction Isolation for Liveness.
Business and System Transactions.
Patterns for Offline Concurrency Control.
Application Server Concurrency.
Further Reading.
6. Session State.
The Value of Statelessness.
Session State.
Ways to Store Session State.
7. Distribution Strategies.
The Allure of Distributed Objects.
Remote and Local Interfaces.
Where You Have to Distribute.
Working with the Distribution Boundary.
Interfaces for Distribution.
8. Putting it all Together.
Starting With the Domain Layer.
Down to the Data Source.
Data Source for Transaction Script.
Data Source Table Module (125).
Data Source for Domain Model (116).
The Presentation Layer.
Some Technology-Specific Advice.
Java and J2EE.
.NET.
Stored Procedures.
Web Services.
Other Layering Schemes.
II. THE PATTERNS.
9. Domain Logic Patterns.
Transaction Script.
How It Works.
When to Use It.
The Revenue Recognition Problem.
Example: Revenue Recognition (Java).
Domain Model.
How It Works.
When to Use It.
Further Reading.
Example: Revenue Recognition (Java).
Table Module.
How It Works.
When to Use It.
Example: Revenue Recognition with a Table Module (C#).
Service Layer(by Randy Stafford).
How It Works.
When to Use It.
Further Reading.
Example: Revenue Recognition (Java).
10. Data Source Architectural Patterns.
Table Data Gateway.
How It Works.
When to Use It.
Further Reading.
Example: Person Gateway (C#).
Example: Using ADO.NET Data Sets (C#).
Row Data Gateway.
How It Works.
When to Use It.
Example: A Person Record (Java).
Example: A Data Holder for a Domain Object (Java).
Active Record.
How It Works.
When to Use It.
Example: A Simple Person (Java).
Data Mapper.
How It Works.
When to Use It.
Example: A Simple Database Mapper (Java).
Example: Separating the Finders (Java).
Example: Creating an Empty Object (Java).
11. Object-Relational Behavioral Patterns.
Unit of Work.
How It Works.
When to Use It.
Example: Unit of Work with Object Registration (Java) (by David Rice).
Identity Map.
How It Works.
When to Use It.
Example: Methods for an Identity Map (Java).
Lazy Load.
How It Works.
When to Use It.
Example: Lazy Initialization (Java).
Example: Virtual Proxy (Java).
Example: Using a Value Holder (Java).
Example: Using Ghosts (C#).
12. Object-Relational Structural Patterns.
Identity Field.
How It Works.
When to Use It.
Further Reading.
Example: Integral Key (C#).
Example: Using a Key Table (Java).
Example: Using a Compound Key (Java).
Foreign Key Mapping.
How It Works.
When to Use It.
Example: Single-Valued Reference (Java).
Example: Multitable Find (Java).
Example: Collection of References (C#).
Association Table Mapping.
How It Works.
When to Use It.
Example: Employees and Skills (C#).
Example: Using Direct SQL (Java).
Example: Using a Single Query for Multiple Employees (Java) (by Matt
Foemmel and Martin Fowler).
Dependent Mapping.
How It Works.
When to Use It.
Example: Albums and Tracks (Java).
Embedded Value.
How It Works.
When to Use It.
Further Reading.
Example: Simple Value Object (Java).
Serialized LOB.
How It Works.
When to Use It.
Example: Serializing a Department Hierarchy in XML (Java).
Single Table Inheritance.
How It Works.
When to Use It.
Example: A Single Table for Players (C#).
Loading an Object from the Database.
Class Table Inheritance.
How It Works.
When to Use It.
Further Reading.
Example: Players and Their Kin (C#).
Concrete Table Inheritance.
How It Works.
When to Use It.
Example: Concrete Players (C#).
Inheritance Mappers.
How It Works.
When to Use It.
13. Object-Relational Metadata Mapping Patterns.
Metadata Mapping.
How It Works.
When to Use It.
Example: Using Metadata and Reflection (Java).
Query Object.
How It Works.
When to Use It.
Further Reading.
Example: A Simple Query Object (Java).
Repository (by Edward Hieatt and Rob Mee).
How It Works.
When to Use It.
Further Reading.
Example: Finding a Person's Dependents (Java).
Example: Swapping Repository Strategies (Java).
14. Web Presentation Patterns.
Model View Controller.
How It Works.
When to Use It.
Page Controller.
How It Works.
When to Use It.
Example: Simple Display with a Servlet Controller and a JSP View (Java).
Example: Using a JSP as a Handler (Java).
Example: Page Handler with a Code Behind (C#).
Front Controller.
How It Works.
When to Use It.
Further Reading.
Example: Simple Display (Java).
Template View.
How It Works.
When to Use It.
Example: Using a JSP as a View with a Separate Controller (Java).
Example: ASP.NET Server Page (C#).
Transform View.
How It Works.
When to Use It.
Example: Simple Transform (Java).
Two Step View.
How It Works.
When to Use It.
Example: Two Stage XSLT (XSLT).
Example: JSP and Custom Tags (Java).
Application Controller.
How It Works.
When to Use It.
Further Reading.
Example: State Model Application Controller (Java).
15. Distribution Patterns.
Remote Facade.
How It Works.
When to Use It.
Example: Using a Java Session Bean as a Remote Facade (Java).
Example: Web Service (C#).
Data Transfer Object.
How It Works.
When to Use It.
Further Reading.
Example: Transferring Information about Albums (Java).
Example: Serializing Using XML (Java).
16. Offline Concurrency Patterns.
Optimistic Offline Lock (by David Rice).
How It Works.
When to Use It.
Example: Domain Layer with Data Mappers (165) (Java).
Pessimistic Offline Lock (by David Rice).
How It Works.
When to Use It.
Example: Simple Lock Manager (Java).
Coarse-Grained Lock (by David Rice and Matt Foemmel).
How It Works.
When to Use It.
Example: Shared Optimistic Offline Lock (416) (Java).
Example: Shared Pessimistic Offline Lock (426) (Java).
Example: Root Optimistic Offline Lock (416) (Java).
Implicit Lock (by David Rice).
How It Works.
When to Use It.
Example: Implicit Pessimistic Offline Lock (426) (Java).
17. Session State Patterns.
Client Session State.
How It Works.
When to Use It.
Server Session State.
How It Works.
When to Use It.
Database Session State.
How It Works.
When to Use It.
18. Base Patterns.
Gateway.
How It Works.
When to Use It.
Example: A Gateway to a Proprietary Messaging Service (Java).
Mapper.
How It Works.
When to Use It.
Layer Supertype.
How It Works.
When to Use It.
Example: Domain Object (Java).
Separated Interface.
How It Works.
When to Use It.
Registry.
How It Works.
When to Use It.
Example: A Singleton Registry (Java).
Example: Thread-Safe Registry (Java) (by Matt Foemmel and Martin Fowler).
Value Object.
How It Works.
When to Use It.
Money.
How It Works.
When to Use It.
Example: A Money Class (Java) (by Matt Foemmel and Martin Fowler).
Special Case.
How It Works.
When to Use It.
Further Reading.
Example: A Simple Null Object (C#).
Plugin (by David Rice and Matt Foemmel).
How It Works.
When to Use It.
Example: An Id Generator (Java).
Service Stub (by David Rice).
How It Works.
When to Use It.
Example: Sales Tax Service (Java).
Record Set.
How It Works.
When to Use It.
References
Index. 0321127420T10162002
Preface.
Who This Book Is For.
Acknowledgements.
Colophon.
Introduction.
Architecture.
Enterprise Applications.
Kinds of Enterprise Application.
Thinking About Performance.
Patterns.
The Structure of the Patterns.
Limitations of These Patterns.
I. THE NARRATIVES.
1. Layering.
The Evolution of Layers in Enterprise Applications.
The Three Principal Layers.
Choosing Where to Run Your Layers.
2. Organizing Domain Logic.
Making a Choice.
Service Layer.
3. Mapping to Relational Databases.
Architectural Patterns.
The Behavioral Problem.
Reading in Data
Structural Mapping Patterns.
Mapping Relationships.
Inheritance.
Building the Mapping.
Double Mapping.
Using Metadata.
Database Connections.
Some Miscellaneous Points.
Further Reading.
4. Web Presentation.
View Patterns.
Input Controller Patterns.
Further Reading.
5. Concurrency (by Martin Fowler and David Rice).
Concurrency Problems.
Execution Contexts.
Isolation and Immutability.
Optimistic and Pessimistic Concurrency Control.
Preventing Inconsistent Reads.
Deadlocks.
Transactions.
ACID.
Transactional Resources.
Reducing Transaction Isolation for Liveness.
Business and System Transactions.
Patterns for Offline Concurrency Control.
Application Server Concurrency.
Further Reading.
6. Session State.
The Value of Statelessness.
Session State.
Ways to Store Session State.
7. Distribution Strategies.
The Allure of Distributed Objects.
Remote and Local Interfaces.
Where You Have to Distribute.
Working with the Distribution Boundary.
Interfaces for Distribution.
8. Putting it all Together.
Starting With the Domain Layer.
Down to the Data Source.
Data Source for Transaction Script.
Data Source Table Module (125).
Data Source for Domain Model (116).
The Presentation Layer.
Some Technology-Specific Advice.
Java and J2EE.
.NET.
Stored Procedures.
Web Services.
Other Layering Schemes.
II. THE PATTERNS.
9. Domain Logic Patterns.
Transaction Script.
How It Works.
When to Use It.
The Revenue Recognition Problem.
Example: Revenue Recognition (Java).
Domain Model.
How It Works.
When to Use It.
Further Reading.
Example: Revenue Recognition (Java).
Table Module.
How It Works.
When to Use It.
Example: Revenue Recognition with a Table Module (C#).
Service Layer(by Randy Stafford).
How It Works.
When to Use It.
Further Reading.
Example: Revenue Recognition (Java).
10. Data Source Architectural Patterns.
Table Data Gateway.
How It Works.
When to Use It.
Further Reading.
Example: Person Gateway (C#).
Example: Using ADO.NET Data Sets (C#).
Row Data Gateway.
How It Works.
When to Use It.
Example: A Person Record (Java).
Example: A Data Holder for a Domain Object (Java).
Active Record.
How It Works.
When to Use It.
Example: A Simple Person (Java).
Data Mapper.
How It Works.
When to Use It.
Example: A Simple Database Mapper (Java).
Example: Separating the Finders (Java).
Example: Creating an Empty Object (Java).
11. Object-Relational Behavioral Patterns.
Unit of Work.
How It Works.
When to Use It.
Example: Unit of Work with Object Registration (Java) (by David Rice).
Identity Map.
How It Works.
When to Use It.
Example: Methods for an Identity Map (Java).
Lazy Load.
How It Works.
When to Use It.
Example: Lazy Initialization (Java).
Example: Virtual Proxy (Java).
Example: Using a Value Holder (Java).
Example: Using Ghosts (C#).
12. Object-Relational Structural Patterns.
Identity Field.
How It Works.
When to Use It.
Further Reading.
Example: Integral Key (C#).
Example: Using a Key Table (Java).
Example: Using a Compound Key (Java).
Foreign Key Mapping.
How It Works.
When to Use It.
Example: Single-Valued Reference (Java).
Example: Multitable Find (Java).
Example: Collection of References (C#).
Association Table Mapping.
How It Works.
When to Use It.
Example: Employees and Skills (C#).
Example: Using Direct SQL (Java).
Example: Using a Single Query for Multiple Employees (Java) (by Matt
Foemmel and Martin Fowler).
Dependent Mapping.
How It Works.
When to Use It.
Example: Albums and Tracks (Java).
Embedded Value.
How It Works.
When to Use It.
Further Reading.
Example: Simple Value Object (Java).
Serialized LOB.
How It Works.
When to Use It.
Example: Serializing a Department Hierarchy in XML (Java).
Single Table Inheritance.
How It Works.
When to Use It.
Example: A Single Table for Players (C#).
Loading an Object from the Database.
Class Table Inheritance.
How It Works.
When to Use It.
Further Reading.
Example: Players and Their Kin (C#).
Concrete Table Inheritance.
How It Works.
When to Use It.
Example: Concrete Players (C#).
Inheritance Mappers.
How It Works.
When to Use It.
13. Object-Relational Metadata Mapping Patterns.
Metadata Mapping.
How It Works.
When to Use It.
Example: Using Metadata and Reflection (Java).
Query Object.
How It Works.
When to Use It.
Further Reading.
Example: A Simple Query Object (Java).
Repository (by Edward Hieatt and Rob Mee).
How It Works.
When to Use It.
Further Reading.
Example: Finding a Person's Dependents (Java).
Example: Swapping Repository Strategies (Java).
14. Web Presentation Patterns.
Model View Controller.
How It Works.
When to Use It.
Page Controller.
How It Works.
When to Use It.
Example: Simple Display with a Servlet Controller and a JSP View (Java).
Example: Using a JSP as a Handler (Java).
Example: Page Handler with a Code Behind (C#).
Front Controller.
How It Works.
When to Use It.
Further Reading.
Example: Simple Display (Java).
Template View.
How It Works.
When to Use It.
Example: Using a JSP as a View with a Separate Controller (Java).
Example: ASP.NET Server Page (C#).
Transform View.
How It Works.
When to Use It.
Example: Simple Transform (Java).
Two Step View.
How It Works.
When to Use It.
Example: Two Stage XSLT (XSLT).
Example: JSP and Custom Tags (Java).
Application Controller.
How It Works.
When to Use It.
Further Reading.
Example: State Model Application Controller (Java).
15. Distribution Patterns.
Remote Facade.
How It Works.
When to Use It.
Example: Using a Java Session Bean as a Remote Facade (Java).
Example: Web Service (C#).
Data Transfer Object.
How It Works.
When to Use It.
Further Reading.
Example: Transferring Information about Albums (Java).
Example: Serializing Using XML (Java).
16. Offline Concurrency Patterns.
Optimistic Offline Lock (by David Rice).
How It Works.
When to Use It.
Example: Domain Layer with Data Mappers (165) (Java).
Pessimistic Offline Lock (by David Rice).
How It Works.
When to Use It.
Example: Simple Lock Manager (Java).
Coarse-Grained Lock (by David Rice and Matt Foemmel).
How It Works.
When to Use It.
Example: Shared Optimistic Offline Lock (416) (Java).
Example: Shared Pessimistic Offline Lock (426) (Java).
Example: Root Optimistic Offline Lock (416) (Java).
Implicit Lock (by David Rice).
How It Works.
When to Use It.
Example: Implicit Pessimistic Offline Lock (426) (Java).
17. Session State Patterns.
Client Session State.
How It Works.
When to Use It.
Server Session State.
How It Works.
When to Use It.
Database Session State.
How It Works.
When to Use It.
18. Base Patterns.
Gateway.
How It Works.
When to Use It.
Example: A Gateway to a Proprietary Messaging Service (Java).
Mapper.
How It Works.
When to Use It.
Layer Supertype.
How It Works.
When to Use It.
Example: Domain Object (Java).
Separated Interface.
How It Works.
When to Use It.
Registry.
How It Works.
When to Use It.
Example: A Singleton Registry (Java).
Example: Thread-Safe Registry (Java) (by Matt Foemmel and Martin Fowler).
Value Object.
How It Works.
When to Use It.
Money.
How It Works.
When to Use It.
Example: A Money Class (Java) (by Matt Foemmel and Martin Fowler).
Special Case.
How It Works.
When to Use It.
Further Reading.
Example: A Simple Null Object (C#).
Plugin (by David Rice and Matt Foemmel).
How It Works.
When to Use It.
Example: An Id Generator (Java).
Service Stub (by David Rice).
How It Works.
When to Use It.
Example: Sales Tax Service (Java).
Record Set.
How It Works.
When to Use It.
References
Index. 0321127420T10162002
Who This Book Is For.
Acknowledgements.
Colophon.
Introduction.
Architecture.
Enterprise Applications.
Kinds of Enterprise Application.
Thinking About Performance.
Patterns.
The Structure of the Patterns.
Limitations of These Patterns.
I. THE NARRATIVES.
1. Layering.
The Evolution of Layers in Enterprise Applications.
The Three Principal Layers.
Choosing Where to Run Your Layers.
2. Organizing Domain Logic.
Making a Choice.
Service Layer.
3. Mapping to Relational Databases.
Architectural Patterns.
The Behavioral Problem.
Reading in Data
Structural Mapping Patterns.
Mapping Relationships.
Inheritance.
Building the Mapping.
Double Mapping.
Using Metadata.
Database Connections.
Some Miscellaneous Points.
Further Reading.
4. Web Presentation.
View Patterns.
Input Controller Patterns.
Further Reading.
5. Concurrency (by Martin Fowler and David Rice).
Concurrency Problems.
Execution Contexts.
Isolation and Immutability.
Optimistic and Pessimistic Concurrency Control.
Preventing Inconsistent Reads.
Deadlocks.
Transactions.
ACID.
Transactional Resources.
Reducing Transaction Isolation for Liveness.
Business and System Transactions.
Patterns for Offline Concurrency Control.
Application Server Concurrency.
Further Reading.
6. Session State.
The Value of Statelessness.
Session State.
Ways to Store Session State.
7. Distribution Strategies.
The Allure of Distributed Objects.
Remote and Local Interfaces.
Where You Have to Distribute.
Working with the Distribution Boundary.
Interfaces for Distribution.
8. Putting it all Together.
Starting With the Domain Layer.
Down to the Data Source.
Data Source for Transaction Script.
Data Source Table Module (125).
Data Source for Domain Model (116).
The Presentation Layer.
Some Technology-Specific Advice.
Java and J2EE.
.NET.
Stored Procedures.
Web Services.
Other Layering Schemes.
II. THE PATTERNS.
9. Domain Logic Patterns.
Transaction Script.
How It Works.
When to Use It.
The Revenue Recognition Problem.
Example: Revenue Recognition (Java).
Domain Model.
How It Works.
When to Use It.
Further Reading.
Example: Revenue Recognition (Java).
Table Module.
How It Works.
When to Use It.
Example: Revenue Recognition with a Table Module (C#).
Service Layer(by Randy Stafford).
How It Works.
When to Use It.
Further Reading.
Example: Revenue Recognition (Java).
10. Data Source Architectural Patterns.
Table Data Gateway.
How It Works.
When to Use It.
Further Reading.
Example: Person Gateway (C#).
Example: Using ADO.NET Data Sets (C#).
Row Data Gateway.
How It Works.
When to Use It.
Example: A Person Record (Java).
Example: A Data Holder for a Domain Object (Java).
Active Record.
How It Works.
When to Use It.
Example: A Simple Person (Java).
Data Mapper.
How It Works.
When to Use It.
Example: A Simple Database Mapper (Java).
Example: Separating the Finders (Java).
Example: Creating an Empty Object (Java).
11. Object-Relational Behavioral Patterns.
Unit of Work.
How It Works.
When to Use It.
Example: Unit of Work with Object Registration (Java) (by David Rice).
Identity Map.
How It Works.
When to Use It.
Example: Methods for an Identity Map (Java).
Lazy Load.
How It Works.
When to Use It.
Example: Lazy Initialization (Java).
Example: Virtual Proxy (Java).
Example: Using a Value Holder (Java).
Example: Using Ghosts (C#).
12. Object-Relational Structural Patterns.
Identity Field.
How It Works.
When to Use It.
Further Reading.
Example: Integral Key (C#).
Example: Using a Key Table (Java).
Example: Using a Compound Key (Java).
Foreign Key Mapping.
How It Works.
When to Use It.
Example: Single-Valued Reference (Java).
Example: Multitable Find (Java).
Example: Collection of References (C#).
Association Table Mapping.
How It Works.
When to Use It.
Example: Employees and Skills (C#).
Example: Using Direct SQL (Java).
Example: Using a Single Query for Multiple Employees (Java) (by Matt
Foemmel and Martin Fowler).
Dependent Mapping.
How It Works.
When to Use It.
Example: Albums and Tracks (Java).
Embedded Value.
How It Works.
When to Use It.
Further Reading.
Example: Simple Value Object (Java).
Serialized LOB.
How It Works.
When to Use It.
Example: Serializing a Department Hierarchy in XML (Java).
Single Table Inheritance.
How It Works.
When to Use It.
Example: A Single Table for Players (C#).
Loading an Object from the Database.
Class Table Inheritance.
How It Works.
When to Use It.
Further Reading.
Example: Players and Their Kin (C#).
Concrete Table Inheritance.
How It Works.
When to Use It.
Example: Concrete Players (C#).
Inheritance Mappers.
How It Works.
When to Use It.
13. Object-Relational Metadata Mapping Patterns.
Metadata Mapping.
How It Works.
When to Use It.
Example: Using Metadata and Reflection (Java).
Query Object.
How It Works.
When to Use It.
Further Reading.
Example: A Simple Query Object (Java).
Repository (by Edward Hieatt and Rob Mee).
How It Works.
When to Use It.
Further Reading.
Example: Finding a Person's Dependents (Java).
Example: Swapping Repository Strategies (Java).
14. Web Presentation Patterns.
Model View Controller.
How It Works.
When to Use It.
Page Controller.
How It Works.
When to Use It.
Example: Simple Display with a Servlet Controller and a JSP View (Java).
Example: Using a JSP as a Handler (Java).
Example: Page Handler with a Code Behind (C#).
Front Controller.
How It Works.
When to Use It.
Further Reading.
Example: Simple Display (Java).
Template View.
How It Works.
When to Use It.
Example: Using a JSP as a View with a Separate Controller (Java).
Example: ASP.NET Server Page (C#).
Transform View.
How It Works.
When to Use It.
Example: Simple Transform (Java).
Two Step View.
How It Works.
When to Use It.
Example: Two Stage XSLT (XSLT).
Example: JSP and Custom Tags (Java).
Application Controller.
How It Works.
When to Use It.
Further Reading.
Example: State Model Application Controller (Java).
15. Distribution Patterns.
Remote Facade.
How It Works.
When to Use It.
Example: Using a Java Session Bean as a Remote Facade (Java).
Example: Web Service (C#).
Data Transfer Object.
How It Works.
When to Use It.
Further Reading.
Example: Transferring Information about Albums (Java).
Example: Serializing Using XML (Java).
16. Offline Concurrency Patterns.
Optimistic Offline Lock (by David Rice).
How It Works.
When to Use It.
Example: Domain Layer with Data Mappers (165) (Java).
Pessimistic Offline Lock (by David Rice).
How It Works.
When to Use It.
Example: Simple Lock Manager (Java).
Coarse-Grained Lock (by David Rice and Matt Foemmel).
How It Works.
When to Use It.
Example: Shared Optimistic Offline Lock (416) (Java).
Example: Shared Pessimistic Offline Lock (426) (Java).
Example: Root Optimistic Offline Lock (416) (Java).
Implicit Lock (by David Rice).
How It Works.
When to Use It.
Example: Implicit Pessimistic Offline Lock (426) (Java).
17. Session State Patterns.
Client Session State.
How It Works.
When to Use It.
Server Session State.
How It Works.
When to Use It.
Database Session State.
How It Works.
When to Use It.
18. Base Patterns.
Gateway.
How It Works.
When to Use It.
Example: A Gateway to a Proprietary Messaging Service (Java).
Mapper.
How It Works.
When to Use It.
Layer Supertype.
How It Works.
When to Use It.
Example: Domain Object (Java).
Separated Interface.
How It Works.
When to Use It.
Registry.
How It Works.
When to Use It.
Example: A Singleton Registry (Java).
Example: Thread-Safe Registry (Java) (by Matt Foemmel and Martin Fowler).
Value Object.
How It Works.
When to Use It.
Money.
How It Works.
When to Use It.
Example: A Money Class (Java) (by Matt Foemmel and Martin Fowler).
Special Case.
How It Works.
When to Use It.
Further Reading.
Example: A Simple Null Object (C#).
Plugin (by David Rice and Matt Foemmel).
How It Works.
When to Use It.
Example: An Id Generator (Java).
Service Stub (by David Rice).
How It Works.
When to Use It.
Example: Sales Tax Service (Java).
Record Set.
How It Works.
When to Use It.
References
Index. 0321127420T10162002