Introduction

J.D. Meier, Alex Homer, David Hill, Jason Taylor, Prashant Bansode, Lonnie Wall, Rob Boucher Jr, Akshay Bogawat

Overview

The purpose of the Application Architecture Guide 2.0 is to improve your effectiveness when building applications on the Microsoft platform. The primary audience for this guide is solution architects and development leads. The guide provides design-level guidance for the architecture and design of applications built on the Microsoft .NET platform. It focuses on the most common types of applications and on partitioning application functionality into layers, components, and services, and also walks through their key design characteristics.

The guidance is task-based and 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 is divided into the following four parts:
  • Part I, “Fundamentals,” provides you with the fundamentals you will need in order to understand architecture design techniques and strategies.
  • Part II, “Design,” provides overarching design guidelines and practices that can be applied to any application type or application layer, including guidelines on how to design a communications solution and plan for services.
  • Part III, “Layers,” provides architecture and design approaches, as well as practices for each layer, including the presentation, business, service, and data access layers.
  • Part IV, “Archetypes,” provides patterns and design frames for each application archetype; including service applications, Web applications, rich client applications, rich Internet applications (RIA), and mobile applications.

Why We Wrote This Guide

We wrote this guide to help you:
  • Design more effective architectures on the .NET platform.
  • Choose the right technologies for your particular scenario.
  • Make more effective choices for key engineering decisions.
  • Map appropriate strategies and patterns.
  • Map relevant patterns & practices solution assets.

Scope

This guide provides principles, patterns, and practices for designing application architectures on the .NET platform. The guide presents a principle-based approach. The overall scope of the guide is shown in Figure 1.

ArchMetaFrame.PNG
Figure 1 Organization of the Guide

The guidance is organized by application types, frames, layers, and quality attributes as follows:
  • Canonical application frame. This frame describes, at a meta-level, the tiers and layers that an architect should consider. Each tier/layer is 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 is described in terms of the target scenarios, technologies, patterns, and infrastructure it contains. Each archetype is mapped to the canonical application frame. The archetypes are illustrative of common application types, and are not comprehensive or definitive.
  • Arch frame. This frame is a common set of categories of hotspots for key engineering decisions.
  • Quality attributes. This is a set of qualities/abilities that shape your application architecture, such as performance, security, scalability, manageability, deployment, and communication.
  • Principles, patterns, and practices. Using the frames as backdrops, the guide overlays relevant principles, patterns, and practices.
  • Technologies and capabilities. This is 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 to focus your thinking about your application architecture approaches and practices.
  • Architecture Frame. The guide uses a frame to organize the key architecture and design decision points into categories, where your choices have a major impact on 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 only the parts you need.
  • Holistic. If you do read the guide from beginning to end, it is organized to fit together in a logical sequence. 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. In addition, product, field, and support teams have performed extensive reviews. Externally, the guidance is validated through community participation and extensive customer feedback cycles.
  • What to do, why, and 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. Each recommendation is then expanded to help you understand what to do, why, and how.
  • Fast Track. This section takes a fast path through the essentials of the framework used by the guide to help you quickly implement the guidance in your organization.

Audience

This guide is useful to anyone who 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 will benefit from reading it.

What to Expect from This Guide

This guide is not a step-by-step tutorial for architecture and design, but rather is a reference. It provides a frame for hotspots within the application architecture space. The frame serves as a durable and evolvable backdrop for key principles, patterns, and practices. While the guide is comprehensive, it is not complete. Where possible, the guide serves as a map of the space rather than an elaboration on a particular point. The guide does not aim at providing a single, comprehensive end-to-end solution to a problem but instead provides concise recommendations to some of the most important problems you might encounter. The bulk of the guide is technology-agnostic and principled-based, but we have added technology considerations where we think it helps you to either choose among available technologies or make the most of them.

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 section. 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

You can use this comprehensive guidance in several ways, both to learn more about the architectural process and as a way to instill knowledge in the members of your team. Consider using the guide in the following ways:
  • Use it as a reference. Use the guide as a reference for learning the architecture and design practices for the .NET Framework.
  • Use it as a mentor. Use the guide as your mentor for learning how to design an application that meets your business goals and quality attributes objectives. The guide encapsulates the lessons learned by many experienced subject-matter experts.
  • Use it when you design applications. Design applications using the principles and practices in the guide, and benefit from the 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 the list of questions to suit your requirements, and expand the list as you learn more.
  • Create training. Create training based on the concepts and techniques used throughout the guide, as well as from its technical insight into 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 area. Each chapter provides actionable guidance on how to architect and design your application. Guidelines and lessons learned are summarized using bulleted lists, and are presented as practices for each area. Special chapters such as “Fast Track,” “Fundamentals of Application Architecture,” and “Architecture Styles” help you to apply the guidance more quickly and more easily.

Architecture and Design Solutions at a Glance

The Architecture and Design Solutions At a Glance section provides a problem index for the guide, highlighting key areas of concern and indicating where to look for more details.

Fast Track

The Fast Track section at the front of the guide helps you to implement the recommendations and guidance quickly and easily.

Part I, “Fundamentals”

This part introduces the fundamental application architecture concepts and terminology. It also helps you to understand the architecture design techniques and strategies. Part I includes the following chapters:

Part II, “Design”

This part provides an approach to architecture design and discusses key architecture decisions such as deployment, architecture style, quality attributes, and communication options. Part II includes the following chapters:

Part III, “Layers”

This part provides architectural and design approaches, as well as practices, for each layer, including the presentation, business, service, and data access layers. Part III includes the following chapters:

Part IV, “Archetypes”

This part provides patterns and design frames for each application archetype; including service applications, Web applications, rich client applications, rich Internet applications, and mobile applications. Part IV includes the following chapters:

Approach Used in This Guide

How do you design successful applications on the .NET platform? This guide describes an approach that starts with an understanding of the entire architectural process, and then focuses in on the specific topics, techniques, practices, and application types to help you achieve the desired results for your design. The suggested approach for using this guide is as follows:
  • If you are using the guide to learn about the fundamentals of application architecture, start with Part I, “Fundamentals,” and then work through the remaining parts to learn about design, layers, quality attributes, and archetypes.
  • If you have some prior experience with application architecture, start with Part II, “Design,” to understand modern design approaches for the major features of an application, services, and communication techniques. Then use the remaining sections to expand and verify your knowledge.
  • If you want to learn about the layered approach to application architecture, start with Part III, “Layers,” and then explore the following sections to see how to apply quality attributes and how to design specific types of applications.
  • If you are experienced in application architecture but want to learn about the different types of application that you can build and the specific features of each type, look at Part IV, “Archetypes.”
  • Alternatively, for a brief overview of the architectural process, read the “Architecture and Design Solutions at a Glance” and “Fast Track” chapters, and then use the remaining sections of the guide to gain specific additional knowledge.

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 at http://www.codeplex.com/AppArchGuide.

Technical Support

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/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
  • Alex Homer
  • David Hill
  • 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, Kashinath TR, Vijaya Jankiraman
  • Edit Team. Dennis Rea
  • External Contributors and Reviewers. Adwait Ullal; Andy Eunson; Brian Sletten; Christian Weyer; David Guimbellot; David Ing; David Weller; 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 to MyStory@Microsoft.com.

Last edited Jan 12, 2009 at 11:36 PM by prashantbansode, version 9

Comments

No comments yet.