Introducing the Guide
The goal of this guide is to help developers and solution architects build effective, high quality applications on the Microsoft platform and the .NET Framework more quickly and with less risk by leveraging tried and trusted architecture and design principles and patterns.
The guide provides an overview of the underlying principles and patterns that provide a solid foundation for good application architecture and design. On top of this foundation, the guide provides generally applicable guidance for partitioning an application’s functionality into layers, components, and services. It goes on to provide guidance on identifying and addressing the key design characteristics of the solution and the key quality attributes (such as performance, security, and scalability) and crosscutting concerns (such as caching and logging). The guide builds still further and provides guidance that is more specific on the architecture and design of the most common application types, such as Web, rich Internet applications (RIA), rich client, services, and mobile applications.
The guidance is presented in parts that correspond to major architecture and design focus points. It is designed to be used as a reference resource, or it can be read from beginning to end.
The guide will help you to:
- Understand the underlying architecture and design principles and patterns for developing successful solutions on the Microsoft platform.
- Identify appropriate strategies and design patterns that will help you design your solution’s layers, components, and services.
- Identify and address the key engineering decision points for your solution.
- Identify and address the key quality attributes and crosscutting concerns for your solution.
- Choose the right technologies for your solution.
- Create a candidate baseline architecture for your solution.
- Identify patterns & practices solution assets and further guidance that will help you to implement your solution.
Note that while the guide is extensive, it is should not be considered a complete and comprehensive treatise on the field of application architecture and design. The guide is intended to serve as a practical and convenient overview of and reference to the general principles of architecture and design on the Microsoft platform and the .NET Framework.
In particular, the guide does not try to provide a definitive or authoritative solution architecture for any particular scenario. Rather, it provides a concise overview of the principles and patterns that underpin good architecture and design, and highlights and provides recommendations for some of the most important issues you might encounter.
The bulk of the guide is technology-agnostic and principled-based, and can be applied to any platform or technology. However, we have added specific Microsoft and .NET Framework technology considerations where we think it helps you to choose amongst available technologies, or to make the most of them in a particular situation.
For more details of the topics covered in this guide, see Contents of the Guide.
This guide is primarily written for developers and solution architects who are looking for guidance on architecting and designing applications on the Microsoft platform and the .NET Framework.
However, this guide will benefit any technologist who is generally interested in the field of application architecture and design, wishes to understand the underlying patterns and principles behind good application design on the .Microsoft platform or the .NET Framework, or is new to the Microsoft platform or the .NET Framework.
How to Use This Guide
This guide is not a step-by-step tutorial for application architecture and design, but rather an overview and a reference. The guide is divided into four main sections, each containing a number of chapters:
- The first section of the guide, "Software Architecture and Design," provides a summary of the underlying principles and patterns that provide the foundation for good application architecture and design and a suggested approach for creating your architecture design. If you are using the guide to learn about the fundamentals of application architecture, start with this section and then work through the remaining parts to learn about layered design, components, quality attributes, crosscutting concerns, communication, deployment, and common application types.
- The second section of the guide, "Design Fundamentals," provides generally applicable guidance for designing a solution’s layers, components, and services; and guidance on addressing quality attributes and crosscutting concerns. It also covers communication and deployment topics. If you want to learn about the layered approach to application architecture and design, or the design of specific components and services, start with this section and then explore the following sections to see how to take account of quality attributes and how to design a physical deployment strategy.
- The third section of the guide, "Application Archetypes," provides specific guidance on the architecture and design of typical application types, such as Web, RIA, rich client, mobile, and services applications. If you have some prior experience with application architecture and design and want to learn about the architecture and major design features of common types of application and the specific guidance for each type, start with this section and then use the remaining sections to expand and verify your knowledge.
- Finally, the Appendices provide an overview of the Microsoft platform and .NET Framework technologies and their capabilities. This section also provides a summary of common design patterns, and references to additional resources and materials. If you are new to the .NET Framework, or want to learn about the technologies available on the Microsoft platform, use this section to get an overview of the .NET Framework and platform services, see the major technology matrices, and read descriptions of patterns & practices assets such as Enterprise Library and the patterns & practices design pattern library.
Depending on your experience and requirements, you can refer directly to the specific section(s) that best address your needs. Alternatively, if you are looking for an extensive overview of design and architecture on the Microsoft platform and the .NET Framework, you can read the guide from start to finish. It will help you to understand the architecture and design approach. You can work the guidance into your application development life cycle and processes, and use it as a training tool.
Feedback and Support
We have made every effort to ensure the accuracy of this guide. However, we welcome feedback on any topics it contains. This includes technical issues specific to the recommendations, usefulness and usability issues, and writing and editing issues.
If you have comments on this guide, please visit the Application Architecture Guide community site at http://www.codeplex.com/AppArchGuide.
Technical support for the Microsoft products and technologies referenced in this guidance is provided by Microsoft Product Support Services (PSS). For product support information, please visit the Microsoft Product Support Web site at: http://support.microsoft.com.
Community and Newsgroup Support
You can also obtain community support, discuss this guide, and provide feedback by visiting the Microsoft MSDN® Newsgroups site at http://msdn.microsoft.com/en-us/subscriptions/aa974230.aspx.
The Team Who Brought You This Guide
This guide was produced by the following .NET architecture and development specialists:
- J.D. Meier
- David Hill
- Alex Homer
- Jason Taylor
- Prashant Bansode
- Lonnie Wall
- Rob Boucher Jr.
- Akshay Bogawat
Contributors and Reviewers
Many thanks to the contributors and reviewers:
- Test Team. Rohit Sharma; Praveen Rangarajan
- Edit Team. Dennis Rea
- External Contributors and Reviewers. Adwait Ullal; Andy Eunson; Brian Sletten; Christian Weyer; David Guimbellot; David Ing; David Weller; David Sussman; Derek Greer; Eduardo Jezierski; Evan Hoff; Gajapathi Kannan; Jeremy D. Miller; John Kordyback; Keith Pleas; Kent Corley; Mark Baker; Paul Ballard; Peter Oehlert; Norman Headlam; Ryan Plant; Sam Gentile; Sidney G Pinney; Ted Neward; Udi Dahan
- Microsoft Contributors and Reviewers. Ade Miller; Amit Chopra; Anna Liu; Anoop Gupta; Bob Brumfield; Brad Abrams; Brian Cawelti; Bhushan Nene; Burley Kawasaki; Carl Perry; Chris Keyser; Chris Tavares; Clint Edmonson; Dan Reagan; David Hill; Denny Dayton; Diego Dagum; Dmitri Martynov; Dmitri Ossipov; Don Smith; Dragos Manolescu; Elisa Flasko; Eric Fleck; Erwin van der Valk; Faisal Mohamood; Francis Cheung; Gary Lewis; Glenn Block; Gregory Leake; Ian Ellison-Taylor; Ilia Fortunov; J.R. Arredondo; John deVadoss; Joseph Hofstader; Kashinath TR; Koby Avital; Loke Uei Tan; Luke Nyswonger; Manish Prabhu; Meghan Perez; Mehran Nikoo; Michael Puleio; Mike Francis; Mike Walker; Mubarak Elamin; Nick Malik; Nobuyuki Akama; Ofer Ashkenazi; Pablo Castro; Pat Helland; Phil Haack; Rabi Satter; Reed Robison; Rob Tiffany; Ryno Rijnsburger; Scott Hanselman; Seema Ramchandani; Serena Yeoh; Simon Calvert; Srinath Vasireddy; Tom Hollander; Vijaya Janakiraman; Wojtek Kozaczynski
Tell Us About Your Success
If this guide helps you, we would like to know. Tell us by writing a short summary of the problems you faced and how this guide helped you out. Submit your summary by email to MyStory@Microsoft.com.