| Acknowledgments | | xiii | |
| Introduction | | xvii | |
| |
| Architects and Architecture Today |
| | 3 | |
| What's a Software Architecture, Anyway? |
| | 4 | |
| Applying Architectural Principles to Software |
| | 4 | |
| What's Architecture and What's Not |
| | 8 | |
| Architecture Is About Decisions |
| | 10 | |
| Requirements and Quality of Software |
| | 12 | |
| Who's the Architect, Anyway? |
| | 17 | |
| An Architect's Responsibilities |
| | 17 | |
| How Many Types of Architects Do You Know? |
| | 20 | |
| Common Misconceptions About Architects |
| | 21 | |
| Overview of the Software Development Process |
| | 24 | |
| | 24 | |
| Models for Software Development |
| | 26 | |
| | 30 | |
| Murphy's Laws of the Chapter |
| | 30 | |
| | 31 | |
| | 32 | |
| Motivation for and History of Modeling Languages |
| | 33 | |
| | 36 | |
| | 41 | |
| | 43 | |
| | 47 | |
| | 53 | |
| | 61 | |
| Murphy's Laws of the Chapter |
| | 61 | |
| Design Principles and Patterns |
| | 63 | |
| | 63 | |
| For What the Alarm Bell Should Ring |
| | 65 | |
| | 66 | |
| | 70 | |
| | 73 | |
| | 73 | |
| | 80 | |
| From Principles to Patterns |
| | 85 | |
| What's a Pattern, Anyway? |
| | 86 | |
| | 92 | |
| | 95 | |
| Applying Requirements by Design |
| | 97 | |
| | 97 | |
| | 108 | |
| | 116 | |
| Aspect-Oriented Programming |
| | 116 | |
| | 120 | |
| | 124 | |
| Murphy's Laws of the Chapter |
| | 125 | |
| Part II Design of the System |
| |
| | 129 | |
| What's the Business Logic Layer, Anyway? |
| | 130 | |
| Dissecting the Business Layer |
| | 130 | |
| Where Would You Fit the BLL? |
| | 134 | |
| Business and Other Layers |
| | 138 | |
| Patterns for Creating the Business Layer |
| | 141 | |
| The Transaction Script Pattern |
| | 145 | |
| Generalities of the TS Pattern |
| | 145 | |
| | 149 | |
| | 154 | |
| Generalities of the TM Pattern |
| | 155 | |
| | 159 | |
| The Active Record Pattern |
| | 165 | |
| Generalities of the AR Pattern |
| | 166 | |
| | 168 | |
| | 176 | |
| Generalities of the DM Pattern |
| | 177 | |
| | 181 | |
| | 191 | |
| Murphy's Laws of the Chapter |
| | 192 | |
| | 193 | |
| What's the Service Layer, Anyway? |
| | 194 | |
| Responsibilities of the Service Layer |
| | 195 | |
| What's a Service, Anyway? |
| | 198 | |
| Services in the Service Layer |
| | 201 | |
| The Service Layer Pattern in Action |
| | 205 | |
| Generalities of the Service Layer Pattern |
| | 205 | |
| The Service Layer Pattern in Action |
| | 208 | |
| | 213 | |
| The Remote Façade Pattern |
| | 213 | |
| The Data Transfer Object Pattern |
| | 216 | |
| | 218 | |
| | 221 | |
| Service-Oriented Architecture |
| | 229 | |
| | 230 | |
| | 232 | |
| SOA and the Service Layer |
| | 234 | |
| The Very Special Case of Rich Web Front Ends |
| | 237 | |
| Refactoring the Service Layer |
| | 238 | |
| Designing an AJAX Service Layer |
| | 242 | |
| Securing the AJAX Service Layer |
| | 246 | |
| | 250 | |
| Murphy's Laws of the Chapter |
| | 250 | |
| | 251 | |
| What's the Data Access Layer, Anyway? |
| | 251 | |
| Functional Requirements of the Data Access Layer |
| | 252 | |
| Responsibilities of the Data Access Layer |
| | 254 | |
| The Data Access Layer and Other Layers |
| | 260 | |
| Designing Your Own Data Access Layer |
| | 263 | |
| | 263 | |
| | 267 | |
| The Inversion of Control Pattern |
| | 273 | |
| Laying the Groundwork for a Data Context |
| | 277 | |
| Crafting Your Own Data Access Layer |
| | 280 | |
| Implementing the Persistence Layer |
| | 281 | |
| Implementing Query Services |
| | 289 | |
| Implementing Transactional Semantics |
| | 298 | |
| Implementing Uniquing and Identity Maps |
| | 305 | |
| | 311 | |
| Implementing Lazy Loading |
| | 315 | |
| Power to the DAL with an O/RM Tool |
| | 321 | |
| Object/Relational Mappers |
| | 322 | |
| Using an O/RM Tool to Build a DAL |
| | 325 | |
| | 333 | |
| About Myths and Stored Procedures |
| | 333 | |
| | 339 | |
| | 340 | |
| Murphy's Laws of the Chapter |
| | 341 | |
| | 343 | |
| User Interface and Presentation Logic |
| | 344 | |
| Responsibilities of the Presentation Layer |
| | 345 | |
| Responsibilities of the User Interface |
| | 348 | |
| Common Pitfalls of a Presentation Layer |
| | 350 | |
| Evolution of the Presentation Patterns |
| | 352 | |
| The Model-View-Controller Pattern |
| | 353 | |
| The Model-View-Presenter Pattern |
| | 364 | |
| The Presentation Model Pattern |
| | 370 | |
| Choosing a Pattern for the User Interface |
| | 372 | |
| Design of the Presentation |
| | 375 | |
| What Data Is Displayed in the View? |
| | 375 | |
| | 381 | |
| Idiomatic Presentation Design |
| | 390 | |
| | 390 | |
| MVP in Windows Presentations |
| | 395 | |
| | 398 | |
| Murphy's Laws of the Chapter |
| | 399 | |
| Final Thoughts | | 401 | |
| Appendix: The Northwind Starter Kit | | 405 | |
| Index | | 413 | |