Part I Principles
1 Architects and Architecture Today
What's a Software Architecture, Anyway?
Applying Architectural Principles to Software
What's Architecture and What's Not
Architecture Is About Decisions
Requirements and Quality of Software
Who's the Architect, Anyway?
An Architect's Responsibilities
How Many Types of Architects Do You Know?
Common Misconceptions About Architects
Overview of the Software Development Process
The Software Life Cycle
Models for Software Development
Summary
Murphy's Laws of the Chapter
2 UML Essentials
UML at a Glance
Motivation for and History of Modeling Languages
UML Modes and Usage
UML Diagrams
Use-Case Diagrams
Class Diagrams
Sequence Diagrams
Summary
Murphy's Laws of the Chapter
3 Design Principles and Patterns
Basic Design Principles
For What the Alarm Bell Should Ring
Structured Design
Separation of Concerns
Object-Oriented Design
Basic OOD Principles
Advanced Principles
From Principles to Patterns
What's a Pattern, Anyway?
Patterns vs. Idioms
Dependency Injection
Applying Requirements by Design
Testability
Security
From Objects to Aspects
Aspect-Oriented Programming
AOP in Action
Summary
Murphy's Laws of the Chapter
Part II Design of the System
4 The Business Layer
What's the Business Logic Layer, Anyway?
Dissecting the Business Layer
Where Would You Fit the BLL?
Business and Other Layers
Patterns for Creating the Business Layer
The Transaction Script Pattern
Generalities of the TS Pattern
The Pattern in Action
The Table Module Pattern
Generalities of the TM Pattern
The TM Pattern in Action
The Active Record Pattern
Generalities of the AR Pattern
The AR Pattern in Action
The Domain Model Pattern
Generalities of the DM Pattern
The DM Pattern in Action
Summary
Murphy's Laws of the Chapter
5 The Service Layer
What's the Service Layer, Anyway?
Responsibilities of the Service Layer
What's a Service, Anyway?
Services in the Service Layer
The Service Layer Pattern in Action
Generalities of the Service Layer Pattern
The Service Layer Pattern in Action
Related Patterns
The Remote Fa?ade Pattern
The Data Transfer Object Pattern
The Adapter Pattern
DTO vs. Assembly
Service-Oriented Architecture
Tenets of SOA
What SOA Is Not
SOA and the Service Layer
The Very Special Case of Rich Web Front Ends
Refactoring the Service Layer
Designing an AJAX Service Layer
Securing the AJAX Service Layer
Summary
Murphy's Laws of the Chapter
6 The Data Access Layer
What's the Data Access Layer, Anyway?
Functional Requirements of the Data Access Layer
Responsibilities of the Data Access Layer
The Data Access Layer and Other Layers
Designing Your Own Data Access Layer
The Contract of the DAL
The Plugin Pattern
The Inversion of Control Pattern
Laying the Groundwork for a Data Context
Crafting Your Own Data Access Layer
Implementing the Persistence Layer
Implementing Query Services
Implementing Transactional Semantics
Implementing Uniquing and Identity Maps
Implementing Concurrency
Implementing Lazy Loading
Power to the DAL with an O/RM Tool
Object/Relational Mappers
Using an O/RM Tool to Build a DAL
To SP or Not to SP
About Myths and Stored Procedures
What About Dynamic SQL?
Summary
Murphy's Laws of the Chapter
7 The Presentation Layer
User Interface and Presentation Logic
Responsibilities of the Presentation Layer
Responsibilities of the User Interface
Common Pitfalls of a Presentation Layer
Evolution of the Presentation Patterns
The Model-View-Controller Pattern
The Model-View-Presenter Pattern
The Presentation Model Pattern
Choosing a Pattern for the User Interface
Design of the Presentation
What Data Is Displayed in the View?
Processing User Actions
Idiomatic Presentation Design
MVP in Web Presentations
MVP in Windows Presentations
Summary
Murphy's Laws of the Chapter
Final Thoughts
Appendix: The Northwind Starter Kit
Index