Note that the information on this page is the BETA 1 of a guide that is now released. See
http://www.codeplex.com/AppArchGuide for the latest PDF and HTML content.
- J.D. Meier, Alex Homer, David Hill,
Prashant Bansode, Lonnie Wall, Rob Boucher Jr, Akshay Bogawat
The purpose of the Application Architecture Guide 2.0 is to improve your effectiveness building applications on the Microsoft platform. The primary audience is solution architects and development leads. The guide will provide design-level guidance for the architecture
and design of applications built on the .NET Platform. It focuses on the most common types of applications, partitioning application functionality into layers, components, and services, and walks through their key design characteristics.
The guidance is task-based and presented in parts that correspond major architecture and design focus points. It's designed to be used as a reference or it can be read from beginning to end:
- Part I, "Fundamentals," provides you with the fundamentals to understand architecture design techniques and strategies.
- Part II, "Design,” provides overarching design guidelines and best practices that can be applied to any application type or application layer, including how to design communication and plan for services.
- Part III, "Layers,” provides architecture and design approach as well as best practices for each layer, including presentation, business, service, and data access.
- Part IV, "Quality Attributes,” provides specific guidance on quality attributes such as security, performance, etc.
- Part IV, "Archeytpes – Design and Patterns,” provides patterns and design frames for each application type archetype, including service applications, web applications, rich client applications, rich internet applications and mobile applications.
Why We Wrote This Guide
We wrote this guide to accomplish the following:
- To help you design more effective architectures on the .NET platform.
- To help you choose the right technologies
- To help you make more effective choices for key engineering decisions.
- To help you map appropriate strategies and patterns.
- To help you map relevant patterns & practices solution assets.
This guide provides principles, patterns, and practices for designing application architectures on the .NET platform. It’s a principle-based approach. The overall scope of the guide is shown in Figure 1.
The guidance is organized by application types, frames, layers, and quality attributes:
- Canonical Application Frame - describes at a meta-level, the tiers and layers that an architect should consider. Each tier/layer will be described in terms of its focus, function, capabilities, common design patterns and technologies.
- Application Types - canonical application archetypes are used to illustrate common application types. Each archetype will be described in terms of the target scenarios, technologies, patterns and infrastructure it contains. Each archetype will be
mapped to the canonical app frame. They are illustrative of common application types and not comprehensive or definitive.
- Arch Frame - a common set of categories for hot spots for key engineering decisions.
- Quality Attributes - a set of qualities/abilities that shape your application architecture: performance, security, scalability, manageability, deployment, communication, etc.
- Principles, patterns and practices - Using the frames as backdrops, the guide will overlay relevant principles, patterns, and practices.
- Technologies and capabilities - a description/overview of the Microsoft custom application development platform and its main technologies and capabilities.
Features of This Guide
- Framework for application architecture. The guide provides a framework that helps you think about application architecture approach and best practices.
- Architecture Frame. The guide uses a frame to organize architecture and design into categories the key decision points, where your choices heavily affect the success of your application.
- Principles and practices. These serve as the foundation for the guide and provide a stable basis for recommendations. They also reflect successful approaches used in the field.
- Modular. Each chapter within the guide is designed to be read independently. You do not need to read the guide from beginning to end to get the benefits. Feel free to use just the parts you need.
- Holistic. The guide is designed with the end in mind. If you do read the guide from beginning to end, it is organized to fit together. The guide, in its entirety, is better than the sum of its parts.
- Subject matter expertise. The guide exposes insight from various experts throughout Microsoft and from customers in the field.
- Validation. The guidance is validated internally through testing. Also, extensive reviews have been performed by product, field, and product support teams. Externally, the guidance is validated through community participation and extensive customer
- What to do, why, how. Each section in the guide presents a set of recommendations. At the start of each section, the guidelines are summarized using bold, bulleted lists. This gives you a snapshot view of the recommendations. Then, each recommendation
is expanded upon telling you what to do, why, and how
- Fast Track. Takes a fast path through the essentials of the framework used by the guide to help you quickly implement the guidance in your organization.
This guide is useful to anyone that cares about application design and architecture. The primary audience for this guide is solution architects and development leads but any technologist who wants to understand good application design on the .NET platform can
get value by reading it.
How to Use This Guide
You can read this guide from beginning to end, or you can read only the relevant parts or chapters. You can adopt the guide in its entirety for your organization or you can use critical components to address your highest-priority needs. If you need to move
quickly, use the fast track. If you have more time and want to fully 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.
Ways to Use the Guide
There are many ways to use this comprehensive guidance. The following are some ideas:
- Use it as a reference. Use the guide as a reference and learn the architecture and design best practices for the .NET Framework.
- Use it as a mentor. Use the guide as your mentor for learning how to architect application that meets your business goals and quality attributes objectives. The guide encapsulates the lessons learned and experience from many subject matter experts.
- Use it when you design applications. Design applications using principles and best practices. Benefit from lessons learned.
- Perform architecture and design reviews. Use the question-driven approach to evaluate architecture and design choices. Use the guidance as a starting point, modify them to suit your needs, and expand them as you learn more.
- Create training. Create training from the concepts and techniques used throughout the guide, as well as technical insight across the .NET Framework technologies.
Organization of This Guide
This guide is arranged into parts and chapters. Each part maps to a key architecture and design focus areas. Each chapter provides actionable guidance on how to architect and design your application. Guidelines and lessons learned are summarized using bulleted
lists and presented as best practices for each area. Special chapters such as Fast Track, Fundamentals of Application Architecture and Architecture Styles help you to apply the guidance faster and more easily.
Architecture Best Practices at a Glance
The "Architecture Best Practices at a Glance" section provides a problem index for the guide, highlighting key areas of concern and where to go for more detail.
The "Fast Track" section in the front of the guide helps you implement the recommendations and guidance quickly and easily.
Part I, “Fundamentals”
This part introduces fundamental of application architecture concepts and terminology. It also helps you understand the architecture design techniques and strategies. Part I includes following chapter:
- Chapter 1, “Fundamentals of Application Architecture”
- Chapter 2, “.NET Platform Overview”
- Chapter 3, “ Application Archetypes”
- Chapter 4, “Deployment Patterns”
- Chapter 5, “Arch Styles”
- Chapter 6, “Quality Attributes”
- Chapter 7, “Layers and Tiers”
Part II, “Design”
This part provides overarching design guidelines and best practices that can be applied to any application type or application layer, including how to design communication and plan for services. Part II includes following chapters:
- Chapter 8, “Designing Your Architecture”
- Chapter 9, “Architecture and Design Guidelines”
- Chapter 10, “Designing Services”
- Chapter 11, “Communication Guidelines”
Part III, “Layers”
This part provides architecture and design approach as well as best practices for each layer, including presentation, business, service, and data access. Part III includes following chapters:
- Chapter 12, “Presentation Layer Guidelines”
- Chapter 13, “Business Layer Guidelines”
- Chapter 14, “Data Access Layer Guidelines”
- Chapter 15, “Service Layer Guidelines”
Part IV, “Quality Attributes”
This part provides specific guidance on quality attributes such as security, performance, etc. Part IV includes following chapters:
- Chapter 16, “Performance Engineering”
- Chapter 17, “Security Engineering”
Part V, “Archetypes – Design and Patterns”
This part provides patterns and design frames for each application type archetype, including service applications, web applications, rich client applications, rich internet applications and mobile applications. Part V includes following chapters:
- Chapter 18, “Mobile Applications”
- Chapter 19, “Office Business Applications (OBA)”
- Chapter 20, “Rich Client Applications”
- Chapter 21, “Rich Internet Applications (RIA)”
- Chapter 22, “Services Applications”
- Chapter 23, “SharePoint LOBs”
- Chapter 24, “Web Applications”
Feedback and Support
We have made every effort to ensure the accuracy of this guide.
Feedback on the Guide
If you have comments on this guide, send an email message to <<link>>. We are particularly interested in feedback regarding:
- Technical issues specific to recommendations
- Usefulness and usability issues
- Writing and editing issues
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:
Community and Newsgroup Support
MSDN Newsgroups: http://msdn.microsoft.com/newsgroups/default.asp
The Team Who Brought You This Guide
This guide was produced by the following .NET architecture and development specialists:
- J.D. Meier, Lead Program Manager, patterns & practices
- Alex Homer
- David Hill
- Jason Taylor
- Prashant Bansode
- Lonnie Wall
- Rob Boucher Jr
- Akshay Bogawat
- Rohit Sharma
- Praveen Rangarajan
Contributors and Reviewers
Many thanks to the contributors and reviewers:
- External Contributors and Reviewers - Adwait Ullal; Andy Eunson; Christian Weyer; David Guimbellot; David Weller; Derek Greer; Eduardo Jezierski; Evan Hoff; Gajapathi Kannan; Jeremy D. Miller; Kent Corley; Mark Baker; Paul Ballard; Norman Headlam;
Ryan Plant; Sam Gentile; Udi Dahan
- Microsoft Contributors and Reviewers - Ade Miller; Anoop Gupta; Bob Brumfield; Brad Abrams; Brian Cawelti; Bhushan Nene; Burley Kawasaki; Carl Perry; Chris Keyser; Chris Tavares; Clint Edmonson; 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; Ilia Fortunov; J.R. Arredondo; John deVadoss; Joseph Hofstader; Koby Avital; Loke Uei Tan; Mehran
Nikoo; Michael Puleio; Mike Walker; Mubarak Elamin; Nick Malik; Nobuyuki Akama; Ofer Ashkenazi; Pablo Castro; Pat Helland; Phil Haack; Reed Robison; Rob Tiffany; Ryno Rijnsburger; Scott Hanselman; Serena Yeoh; Srinath Vasireddy; Tom Hollander; 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 to