次の方法で共有


アプリケーション アーキテクチャ ガイド 2.0

序文

更新日: 2011 年 4 月 8 日

著作権

このドキュメントに記載されている情報 (URL 等のインターネット Web サイトに関する情報を含む) は、将来予告なしに変更することがあります。別途記載されていない場合、このソフトウェアおよび関連するドキュメントで使用している会社、組織、製品、ドメイン名、電子メール アドレス、ロゴ、人物、場所、出来事などの名称は架空のものです。実在する商品名、団体名、個人名などとは一切関係ありません。お客様ご自身の責任において、 適用されるすべての著作権関連法規に従ったご使用を願います。このドキュメントのいかなる部分も、米国 Microsoft Corporation の書面による許諾を受けることなく、その目的を問わず、どのような形態であっても、複製または譲渡、あるいは検索システムに格納または公開することは禁じられています。ここでいう形態とは、複写や記録など、電子的な、または物理的なすべての手段を含みます。

マイクロソフトは、このドキュメントに記載されている内容に関し、特許、特許申請、商標、著作権、またはその他の無体財産権を有する場合があります。別途マイクロソフトのライセンス契約上に明示の規定のない限り、このドキュメントはこれらの特許、商標、著作権、またはその他の無体財産権に関する権利をお客様に許諾するものではありません。

© 2009 Microsoft Corporation. All rights reserved.

Microsoft、MS-DOS、Windows、Windows NT、Windows Server、Active Directory、MSDN、Visual Basic、Visual C++、Visual C#、Visual Studio、および Win32 は、米国 Microsoft Corporation の米国およびその他の国における登録商標または商標です。

記載されている会社名、製品名には、各社の商標のものもあります。

目次

  1. 序文 ~ S.Somasegar
  2. 序文 ~ Scott Guthrie
  3. 序文 ~ David Hill

1. 序文 ~ S.Somasegar

私のチームでは、独自のテクノロジを使用してマイクロソフト製品を開発したり、ユーザーやパートナーと日常的に交流したりする中で、マイクロソフト テクノロジを使用したアプリケーション アーキテクチャ、設計パターン、および設計原理にベスト プラクティスを適用するための実用的なガイダンスを策定しました。このガイダンスは、開発者とソリューション アーキテクトの両方に有用です。このガイド『マイクロソフト アプリケーション アーキテクチャ ガイド』は、マイクロソフト社内で培ったノウハウ、社外の専門家、ユーザー、およびコミュニティから得たガイダンスを開発者とソリューション アーキテクトの皆さんと共有するために統合したものです。

このガイドは、ソリューション アーキテクトと開発者が、マイクロソフト プラットフォームで実行するより効果的なアプリケーションの設計と開発ができるようになることと、新しいプロジェクトの初期段階における重要な判断をサポートすることを目的としています。また、アーキテクトと開発者が既存のソリューションを強化するのに役立つ特殊なトピックに関するコンテンツも提供しています。このガイドには、25 人以上のマイクロソフト社外の専門家とユーザーによる寄稿とレビューが含まれています。

アーキテクチャ パターン、アーキテクチャの原理、品質特性、横断的関心事の観点からソリューションについて考えると、ソリューションを開発する際に役立つ、基準となるアプリケーション アーキテクチャや関連するテクノロジ、パターン、ガイダンス資産をすばやく決定できます。また、このガイドを使用して、アプリケーション アーキテクチャの重要な点を特定すると、シナリオに合わせて、そこを改良できます。

このガイドでは、一般的な種類のアプリケーションの参照アプリケーション アーキテクチャ、品質特性と横断的関心事のガイドライン、およびソリューション アーキテクチャの設計と改良に役立つ設計の手法のガイドラインを提供します (ここで言う一般的な種類のアプリケーションには、Web アプリケーション、リッチ クライアント アプリケーション、リッチ インターネット アプリケーション (RIA)、モバイル アプリケーション、サービス アプリケーションなどが含まれます)。

『マイクロソフト アプリケーション アーキテクチャ ガイド 第 2 版』が、適切なアーキテクチャ、適切なテクノロジ、および関連するパターンを選択して、効果的な設計を決定する一助となれば幸いです。

マイクロソフト
Developer Division、シニア バイス プレジデント
S. Somasegar

ページのトップへ


2. 序文 ~ Scott Guthrie

アプリケーション アーキテクチャは難易度の高いトピックです。事実、アプリケーション アーキテクチャに関するさまざまな書籍、記事、およびホワイトペーパーからも、そのことが見て取れます。開発者やアーキテクトにとっても、マイクロソフト プラットフォームのアーキテクチャとベスト プラクティスの設計を理解することはたいへん困難です。このガイドの前身である『Application Architecture for .NET: Designing Applications and Services』では、このトピックをわかりやすく説明していましたが、この書籍が執筆されたのは 2002 年と少し前のことになってしまいました。

2002 年以降に誕生した多くのテクノロジについて扱うために、J. D. Meier、David Hill、および Microsoft patterns & practices チームは、アプリケーション アーキテクチャに関する新しいガイドを作成しました。このガイドでは、最新のベスト プラクティスとテクノロジに基づいた、マイクロソフト プラットフォームで実行するアプリケーションやサービスの設計に関する洞察力に富んだガイダンスが提供されています。その結果、ソリューション アーキテクトと開発者が、マイクロソフト プラットフォーム対応のアプリケーションを効果的に設計するのに役立つ『マイクロソフト アプリケーション アーキテクチャ ガイド第 2 版』が誕生しました。このガイドでは、.NET Framework とマイクロソフト プラットフォーム、これらで使用されている主要テクノロジと機能を概要します。また、プラットフォームに依存しない、パターン指向の、原理に基づいたガイダンスも提供しているので、堅牢な基盤に基づいてアプリケーションを設計するのに役立ちます。

このガイドは、アプリケーション アーキテクチャの構造を構成する多数の重要なアーキテクチャと設計の原理に基づいています。また、設計における重要な判断とその対処に関するガイドラインと、品質特性、横断的関心事、アプリケーション アーキテクチャを形成する機能についても説明します。アプリケーション アーキテクチャを形成する要素には、パフォーマンス、セキュリティ、スケーラビリティ、管理容易性、展開、通信などがあります。

このガイドでは、メタ レベルにおいて、ソリューション アーキテクトが考慮する必要があるティアとレイヤーの概要について解説しています。各ティアと各レイヤーについては、焦点、機能、一般的な設計パターン、およびテクノロジの視点から説明しています。その後、この情報を背景として、関連する原理、パターン、およびプラクティスへと展開します。最後に、正規のアプリケーションの規範を提示して、一般的なアプリケーションの種類について解説します。各規範については、対象のシナリオ、関連するテクノロジ、パターン、およびインフラストラクチャの観点から説明します。

このガイドの内容は、基本的に、マイクロソフト社内の専門家、マイクロソフト パートナー、ユーザー、およびコミュニティで蓄積されたノウハウに基づいています。そのため、マイクロソフト プラットフォームについての理解を深め、適切なアーキテクチャとテクノロジを選択して、実証済みの慣例と教訓を使用してアプリケーションを開発するのに役立ちます。

マイクロソフト
.NET 開発者プラットフォーム部門、コーポレート バイス プレジデント
Scott Guthrie

ページのトップへ


3. 序文 ~ David Hill

冗談好きな開発者の間で流行っていた古いジョークに「アーキテクトとして見てもらうために必要なことは、技術的な質問を受けたときに "場合によります" と答えるだけだ」というものがありました。「ソリューションに認証と承認を実装するには、どの方法が最適ですか? - 場合によります」、「データ アクセス レイヤーを実装するにはどうすればよいですか? - 場合によります」、「ソリューションの UI には、どのテクノロジを使用すればよいですか? - 場合によります」、「どうすればアプリケーションにスケーラビリティを持たせることができますか? - 場合によります」という具合です。これで、このジョークの概要はおわかりいただけたと思います。

事実、言うまでもなく技術的な質問への回答は場合によって異なります。結局、すべてのソリューションは異なっていて、多くの要素が含まれており、技術的な要素もそうでない要素もあります。ソリューションの規模にかかわらず、このような要素は、ソリューションのアーキテクチャと設計に大きな影響を及ぼします。開発者とソリューション アーキテクトは、ソリューションを開発する際に使用するテクノロジとツールはもちろんのこと、ビジネス、エンド ユーザー、組織の IT 環境、管理のインフラストラクチャ、および経済環境によって課される、(しばしば矛盾する) 要件と制約のバランスを取る必要があります。

このような要件と制約は、新しい機会が生じたり、システムに新たな要求が課されたりするたびに進化しており、IT にかかわる生活のスパイスとなっています。ビジネス ルールの変化や新たなビジネス領域の出現は、新しいアプリケーションと既存のアプリケーションの両方に影響を及ぼします。ユーザーは時間の経過と共に、優れた、一貫性のある、密接に統合されたユーザー エクスペリエンスを期待するようになります。それを受けて、新たなコンプライアンスの要件が発生したり、コスト削減または可用性やスケーラビリティの向上を実現する新しい IT インフラストラクチャ テクノロジが誕生したりします。また、開発コストの削減や以前は実装が困難だったシナリオの実現を約束する、新しいテクノロジ、フレームワーク、およびツールも絶えずリリースされています。

これらをすべて理解しながら、効果的なソリューションを予算内でスケジュールどおりに実現することが、簡単な作業でないのは明らかです。そのためには、開発者とソリューション アーキテクトが、競合および重複する多くの要素 (技術的ではないものも含まれます) を考慮し、すべての要素間のバランスを取る必要があります。あまりにも多くの要素を考慮しようとすると、設計が過剰で複雑なソリューションになります。そのようなソリューションは、構築するのに時間がかかるにもかかわらず、耐久性と柔軟性を強化するという目的を果たしません。反対に少しの要素しか考慮しないと、制限された、柔軟性のない、粗製のソリューションとなり、そのようなソリューションは発展させるのが困難で、うまく拡張できません。つまり、多くの場合、開発者とソリューション アーキテクトは、"全体的なソリューション" と "部分的なソリューション" の中庸を取る必要があります。

これは、アプリケーション アーキテクチャの真髄を表しているのではないでしょうか。つまり、今日のツールとテクノロジを使用して、できるだけ多くのビジネス価値を生み出しながら、スケーラビリティ、柔軟性、保守容易性により現行の価値を最大限に高めるために、今日のビジネスによって課される要件や制約と将来かされることが予想される要件や制約の両方に注意を払う必要があるということです。開発者またはソリューション アーキテクトがアーキテクチャの原理とパターンについて熟知すると、ソリューションの全体的な成功の鍵を握る全体的な設計プロセスと設計に関する重要な問題を理解して考慮できるようになります。このような知識を習得することにより、多くの情報に基づいて決断を下したり、競合または重複する要件と制約の適切なバランスを取ったりすることが可能になります。また、ソリューションがビジネスの目標を達成または上回るだけでなく、コスト効率のよい、拡張性、保守容易性、および柔軟性のある方法で目標を達成するようにできます。

これが、開発者とソリューション アーキテクトの両者にかかわることにはお気付きでしょう。どちらも、このガイドで概要を説明している、アーキテクチャのパターンと原理を着実に理解することにより、大きなメリットを得られます。実装の詳細は、全体的な設計ほど重要ではないと考える方もいるかもしれませんが、個人的な経験から言うと、そうではありません。小さな判断も、時間の経過と共に蓄積されます。実装レベルの詳細は、全体的なソリューション アーキテクチャと、そのスケーラビリティ、保守容易性、柔軟性に大きな影響を及ぼすので、開発者とソリューション アーキテクチャは、これを着実に理解する必要があります。また、理解を共有することで、円滑なコミュニケーションが行われるというメリットもあります。

このガイドは、適切な判断を下して優れたソリューションを構築するうえで役立つ、アプリケーション アーキテクチャ、設計原理、および設計パターンの概要を提供することを目的としています。また、最初から最後まで順番に読んだり、参考文献として使用して、関連のあるセクションを直接参照したりできるような構成になっています。ガイドの前半では、一般的に適用できるアーキテクチャと設計原理に重点を置いて説明します。そのアーキテクチャと設計原理は、すべての種類のソリューションに適用されます。後半では、Web アプリケーション、リッチ クライアント アプリケーション、モバイル アプリケーションなどの、一般的なアプリケーションの種類に重点を置いて、各種類の一般的なアーキテクチャや設計に関する重要な考慮事項について説明します。このガイドで取り上げるアーキテクチャは、お手持ちのソリューションには、直接対応しないかもしれませんが、個々の状況に合わせて使用および発展できるベースライン アーキテクチャに関する情報を提供しています。アーキテクチャの重要な要素を特定する方法についてのアドバイスを提供しているので、徐々にアーキテクチャを改良できます。

このガイドは、.NET Framework をベースとしたマイクロソフト プラットフォームで実行するソリューションを開発することに特化しているので、関連するテクノロジとツールの詳細情報を提供する記事とリソースを関連情報として紹介しています。ですが、基盤となる原理とパターンは、一般的にどのプラットフォームにも適用できるということがおわかりいただけると思います。このガイドは、アプリケーションのアーキテクチャと設計におけるすべての側面に関する完全で包括的な資料ではありません。このような資料を作成するには、ガイドの内容を大幅に増やすか、ガイドを何巻も作る必要があります。そのため、このガイドでは、重要なトピックの実用的な概要を、詳細なガイダンスや詳細な資料へのリンクと併せて提供しています。

アプリケーションのアーキテクチャと設計の分野は、動的で常に進化しています。これまでにソリューションの構築を成功に導いた基盤は、今後も当面は役立ちますが、テクノロジと新しい設計手法の両方において、革新の速度が衰えないことについても備える必要があります。マイクロソフト プラットフォームと .NET Framework、これらがサポートするテクノロジとシナリオの範囲は深く広大で、その程度は日々増しています。しかし、予測されるものが現実になるのを待つ必要はなく、今すぐ魅力的で有益なソリューションを構築することは可能です。ぜひ、このガイドをその作業にお役立てください。

patterns and practices
David Hill

2009 年 9 月

ページのトップへ