Martin Fowler:享譽世界的軟件開發(fā)大師。現(xiàn)為著名軟件開發(fā)咨詢公司ThoughtWorks的首席科學(xué)家。他在面向?qū)ο蠓治雠c設(shè)計、UML、設(shè)計模式、軟件開發(fā)方法學(xué)、XP、重構(gòu)等方面都有重要貢獻。他更全球最具影響力的技術(shù)作家之一,除本書外,他的《分析模式》、《UML精粹》和《重構(gòu)》等著作都已經(jīng)成為經(jīng)典。
圖書目錄
Preface xvii Who This Book Is For xx A cknowledgments xxi Colophon xxiii Introduction 1 Architecture 1 EnterpriseApplications 2 Kinds of EnterpriseApplication 5 ThinkingAbout Performance 6 Patterns 9 The Structure of the Patterns 11 Limitations of These Patterns 13 PART 1: The Narratives 15 Chapter 1: Layering 17 The Evolution of Layers in EnterpriseApplications 18 The Three Principal Layers 19 Choosing Where to Run Your Layers 22 Chapter 2: Organizing Domain Logic 25 MakingA Choice 29 Service Layer 30 Chapter 3: Mapping to Relational Databases 33 Architectural Patterns 33 The Behavioral Problem 38 Reading in Data 40 Structural Mapping Patterns 41 Mapping Relationships 41 Inheritance 45 Building the Mapping 47 Double Mapping 48 Using Metadata 49 Database Connections 50 Some Miscellaneous Points 52 Further Reading 53 Chapter 4: Web Presentation 55 View Patterns 58 Input Controller Patterns 61 Further Reading 61 Chapter 5: Concurrency (by Martin FowlerAnd David Rice) 63 Concurrency Problems 64 Execution Contexts 65 IsolationAnd Immutability 66 OptimisticAnd Pessimistic Concurrency Control 67 Preventing Inconsistent Reads 68 Deadlocks 70 Transactions 71 ACID 71 Transactional Resources 72 Reducing Transaction Isolation for Liveness 73 BusinessAnd System Transactions 74 Patterns for Offline Concurrency Control 76 Application Server Concurrency 78 Further Reading 80 Chapter 6: Session State 81 The Value of Statelessness 81 Session State 83 Ways to Store Session State 84 Chapter 7: Distribution Strategies 87 TheAllure of Distributed Objects 87 RemoteAnd Local Interfaces 88 Where You Have to Distribute 90 Working with the Distribution Boundary 91 Interfaces for Distribution 92 Chapter 8: Putting ItAll Together 95 Starting with the Domain Layer 96 Down to the Data Source Layer 97 Data Source for Transaction Script (11 O) 97 Data Source for Table Module (125) 98 Data Source for Domain Model (116) 98 The Presentation Layer 99 Some Technology-SpecificAdvice 100 JavaAnd J2EE 100 NET 101 Stored Procedures 102 Web Services 103 Other Layering Schemes 103 PART 2: The Patterns 107 Chapter 9: Domain Logic Patterns 109 Transaction Script 110 How It Works 110 When to Use It 111 The Revenue Recognition Problem 112 Example: Revenue Recognition (Java) 113 Domain Model 116 How It Works 116 When to Use It 119 Further Reading 119 Example: Revenue Recognition (Java) 120 Table Module 125 How It Works 126 When to Use It 128 Example: Revenue Recognition withA Table Module (C#) 129 Service Layer (by Randy Stafford) 133 How It Works 134 When to Use It 137 Further Reading 13 7 Example: Revenue Recognition (Java) 138 Chapter 10: Data SourceArchitectural Patterns 143 Table Data Gateway 144 How It Works 144 When to Use It 145 Further Reading 146 Example: Person Gateway (C#) 146 Example: UsingADO NET Data Sets (C#) 148 Row Data Gateway 152 How It Works 152 When to Use It 153 Example:A Person Record (Java) 155 Example:A Data Holder forA Domain Object (Java) 158 Active Record 160 How It Works 160 When to Use It 161 Example:A Simple Person (Java) 162 Data Mapper 165 How It Works 165 When to Use It 170 Example:A Simple Database Mapper (Java) 171 Example: Separating the Finders (Java) 176 Example: CreatingAn Empty Object (Java) 179 Chapter 11: Object-Relational Behavioral Patterns 183 Unit of Work 184 How It Works 184 When to Use It 189 Example: Unit of Work with Object Registration (Java) (by David Rice) 190 Identity Map 195 How It Works 195 When to Use It 198 Example: Methods forAn Identity Map (Java) 198 Lazy Load 200 How It Works 200 When to Use It 203 Example: Lazy Initialization (Java) 203 Example: Virtual Proxy (Java) 203 Example: UsingA Value Holder (Java) 205 Example: Using Ghosts (C#) 206 3hapter 12: Object-Relational Structural Patterns 215 Identity Field 216 How It Works 216 When to Use It 220 Further Reading 221 Example: Integral Key (C#) 221 Example: UsingA Key Table (Java) 222 Example: UsingA Compound Key (Java) 224 Foreign Key Mapping 236 How It Works 236 When to Use It 239 Example: Single-Valued Reference (Java) 240 Example: Multitable Find (Java) 243 Example: Collection of References (C#) 244 Association Table Mapping 248 How It Works 248 When to Use It 249 Example: EmployeesAnd Skills (C#) 250 Example: Using Direct SQL (Java) 253 Example: UsingA Single Query for Multiple Employees (Java) (by Matt FoemmelAnd Martin Fowler) 256 Dependent Mapping 262 How It Works 262 When to Use It 263 Example:AlbumsAnd Tracks (Java) .. 264 Embedded Value 268 How It Works 268 When to Use It 268 Further Reading 270 Example: Simple Value Object (Java) 270 Serialized LOB 272 How It Works 272 When to Use It 274 Example: SerializingA Department Hierarchy in XML (Java) 274 Single Table Inheritance 278 How It Works 278 When to Use It 279 Example:A Single Table for Players (C#) 280 LoadingAn Object from the Database 281 Class Table Inheritance 285 How It Works 285 When to Use It 286 Further Reading 287 Example: PlayersAnd Their Kin (C#) 287 Concrete Table Inheritance 293 How It Works 293 When to Use It 295 Example: Concrete Players (C#) 296 Inheritance Mappers 302 How It Works 303 When to Use It 304 Chapter 13: Object-Relational Metadata Mapping Patterns 305 Chapter 14: Web Presentation Patterns 329 Chapter 15: Distribution Patterns 387 Chapter 16: Offline Concurrency Patterns 415 Chapter 17: Session State Patterns 455 Chapter 18: Base Patterns 465 Index 517