본문 바로가기

IT 살이/04. 기술 - 아키텍처

책상정리 #4 - Patterns of Enterprise Application Architecture

그 이름, Martin Fowler !! 2000년대 초반에 나온 고전(?)이긴 하지만 현재 기업에서 사용되고 있는 엔터프라이즈 아키텍처에 대해서 정리하고 싶다면 이 책을 보면 되지 않을까 싶다. 이 책의 부분들을 조합하면 대부분의 기업들의 아키텍처는 만들어 질 수 있을 것으로 보인다.



저자 Martin Fowler외 


목차를 옮기려 하니 꽤 길다. 휴~~


Introduction

   Architecture

   Enterprise Application

   Kinds of Enterprise Application

   Thinking About Performance

   Patterns

      The Structure of the Patterns

      Limitations of These Patterns

PART 1: The Narratives

Chapter 1: Layering

   The Evolution of Layers in Enterprise Applications

   The Three Principal layers

   Choosing Where to Run Your Layers

Chapter 2: Organizing Domain Logic

   Making a Choice

   Service Layer

Chapter 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

Chapter 4: Web Presentation

   View Patterns

   Input Controller Patterns

   Further Reading

Chapter 5: Concurrency

   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

Chapter 6: Session State

   The Value of Statelessness

   Session State

   Ways to Store Session State

Chapter 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

Chapter 8: Putting It All Together

   Starting with the Domain Layer

   Down to the Data Source Layer

      Data Source for Transaction Script(110)

      Data Source for 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

PART 2: The Patterns

Chapter 9: Domain Logic Patterns

   Transaction Script

      The Revenue Recognition Problem

      Example: Revenue Recognition(Java)

   Domain Model

      Example: Revenue Recognition( Java )

   Table Module

      Example: Revenue Recognition with a Table Module(C#)

   Service Layer(by Radndy Stafford)

      Example: Revenue Recognition( Java )

Chapter 10: Data Source Architectural Patterns

   Table Data Gateway

      Example: Person Gateway(C#)

      Example: Using ADO.NET Data Sets(C#)

   Row Data Gateway

      Example: A Person Record(Java)

      Example: A Data Holder for a Domain Object( Java )

   Active Record

      Example:  A Simple Person(Java )

   Data Mapper

      Example: A Simple Database Mapper( Java )

      Example: Separating the Finders( Java )

      Example : Creating an Empty Object( java )

Chapter 11: Object-relational Behavioral Patterns

   Unit of Work

      Example : Unit of Work with Object Registration( Java)( by David Rice )

   Identity Map

      Example: Methods for an Identity Map(Java)

   Lazy Load

      Example: Lazy Initialization(Java)

      Example: Virtual Proxy(Java)

      Example: Using a Value Holder(Java)

      Example: Using Ghosts(C#)

Chapter 12: Object-Relational Structural Patterns

   Identity Field

      Example: Integral Key( C#)

      Example: Using a Key Table(Java )

      Example: Using a Compound Key( Java)     

   Foreign Key Mapping

      Example: Single-Valued Reference( Java )

      Example: Multitable Find(Java)

      Example: Collection of References(C#)

   Association Table Mapping

      Example: Employees and Skills( C#)

      Example: Using Direct SQL( Java )

      Example: Using s Single Query for Multiple Employees(Java )( by Matt Foemmel and Martin Fowler)

   Dependent Mapping

      Example: Albums and Tracks(Java)

   Embedded Value

      Example: Simple Value Objejct(Java)

   Serialized LOB

      Example: Serializing a Department Hierarchy in XML(Java)

   Single Table Inheritance

      Example : A Single Table for Players(C#)

      Loading an Object from the Database

   Class Table Inheritance

      Example: Players and Their Kin(C#)

   Concrete Table Inheritance

      Example: Concrete Players(C#)

   Inheritance Mappers

Chapter 13: Object-Relational Metadata Mapping Patterns

   Metadata Mapping

      Example: Using Metadata and Reflection(Java)

   Query Object

      Example: A Simple Query Object(Java)

   Repository( by Edward Hieatt and Rob Mee)

      Example: Finding a Person's Dependents( Java )

      Example: Swapping Repository Strategies(Java )

Chapter 14: Web Presentation Patterns

   Model View Controller

   Page Controller

      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

      Example: Simple Display(Java)

   Template View

      Example: Using a JSP as a View with a Separate Controller(Java)

      Example: ASP.NET Server Page(C#)

   Transform View

      Example: Simple Transform(Java)

   Two Step View

      Example: Tow Stage XSLT(XSLT)

      Example: JSP and Custom Tags(Java)

   Application Controller

      Example: State Model Application Controller(Java)

Chapter 15: Distribution Patterns

   Remote Facade

      Example: Using a Java Session Bean as a Remote Facade(Java)

      Example: Web Service( C#)

   Data Transfer Object

      Example: Transferring Information About Albums(Java)

      Example: Serializing Using XML(Java)

Chapter 16: Offline Concurrency Patterns

   Optimistic Offline Lock(by David Rice)

      Example: Domain Layer with Data Mappers(165)(Java)

   Pessimistic Offline Lock( by David Rice)

      Example: Simple Lock Manager(Java)

   Coarse-Grained Lock(by David Rice and Matt Foemmel)

      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)

      Example: Implicit Pessimistic Offline Lock(426)(Java)

Chapter 17: Session State Patterns

   Client Session State

   Server Session State

   Database Session State

Chapter 18: base Patterns

   Gateway

      Example: A Gateway to a Proprietary Messaging Service(Java)

   Mapper

   Layer Supertype

      Example: Domain Object(Java)

   Separated Interface

   Registry

      Example: A Singleton Registry(Java)

      Example: Thread-Safe Registry(Java)( by Matt Foemmel and Martin Fowler)

   Value Object

   Money

      Example: A Money Class(Java)( by Matt Foemmel and Martin Fowler)

   Special Case

      Example: A Simple Null Object( C#)

   Plugin( by David Rice and Matt Foemmel)

      Example: An Id Generator( Java )

   Service Stub( by David Rice)

      Example: Sales Tax Service(Java)

   Record Set