連載

アプリケーション・アーキテクチャ設計入門

第1回 .NET開発者のための設計ガイドライン

日本ユニシス 猪股 健太郎
2003/08/16

Page1 Page2 Page3 Page4

Application Architecture for .NETの概略

 .NET Frameworkを利用してエンタープライズ・アプリケーションを開発する開発者で、アーキテクチャに関する情報を求めている人々のために、マイクロソフトは「.NET Architecture Center」というWebサイトを開設している。このサイトの中の「patterns & practices」で、アーキテクチャ設計の経験から得られた知識を「パターン」あるいは「ベスト・プラクティス」として文書化し、公開している。また、マイクロソフトにはPrescriptive Architecture Group(規範アーキテクチャグループ:略称「PAG」)という組織があり、この.NET Architecture Centerにおいて積極的に文書を公開している。そのPAGが中心になってまとめ上げられ、「patterns & practices」で公開された文書の1つが「Application Architecture for .NET: Designing Applications and Services」(以下、「AAfN」と略す)なのである。

 このAAfNは、.NET Frameworkを用いた分散システム・ソリューションを構築するアプリケーション・アーキテクトおよび開発者を対象に、アーキテクチャと設計のレベルでのガイダンスを提供するものである。

 「分散システム・ソリューション」とは、分散アプリケーションおよびXML Webサービスに代表されるアプリケーションまたはサービスのことだ。特に、多数のデータソースやサービスを統合したり、マルチデバイスのユーザー・インターフェイスを持っていたりするソリューションが考慮の対象となっている。

 このガイダンスには、

  • アプリケーションおよびサービスの論理アーキテクチャ
  • 特定の視点から推奨される技術および製品
  • 機能/非機能要求を満たす設計判断
  • 適切な通信メカニズムの選択

が含まれている。

 AAfNの目的は、開発の初期フェイズで決定しなければならない重要なポイントをまとめ、設計者がさまざまな選択肢の中から最適解を選ぶのを助けることにある。

 このような内容を提供するに当たって、「patterns & practices」サイトの情報、MSDNの記事、それからGotDotNetなどのコミュニティ・サイトにおける分散アプリケーション設計についての議論などが参考にされたとのことだ。

■階層型分散アプリケーション

 AAfNの想定読者は、.NETコンポーネント開発や階層型分散アプリケーションの経験者とされている。階層型分散アプリケーションの経験ということでは、例えばJ2EEやWindows DNAでの開発経験があれば問題ないだろう。そういった開発経験のない方のために、ここでは階層型分散アプリケーションについて簡単にまとめておく。階層型分散アプリケーションになじんでいる読者は、この章を飛ばして先に進んで構わない。

 階層型分散アプリケーションとは、アプリケーションを構成する部品を役割ごとにグループ化し、層状に積み重ねた構造を持つアプリケーションのことだ。代表的なのが、ユーザー・インターフェイスを担当するプレゼンテーション層、ビジネス・ロジックを担当するビジネス層、データソースへの入出力を担当するデータ層の3つで構成される3層アプリケーションだ。プレゼンテーション層がビジネス層を呼び出し、ビジネス層がデータ層を呼び出す。現在、Webアプリケーションではこのようなアーキテクチャが主流となっている。

代表的な階層型分散アプリケーションである3層アプリケーション
ユーザー・インターフェイスを担当するプレゼンテーション層、ビジネス・ロジックを担当するビジネス層、データソースへの入出力を担当するデータ層の3つで構成される。

 階層型分散アプリケーションの代表的な利点は、次のようなものだろう。

  • データやビジネス・ロジックを集中管理できる。
  • RDBMSを移動変更したり、ビジネス・ロジックに新たな機能を追加したりといった、ある階層における実装上の変更がほかの階層に影響を及ぼさない。
  • アプリケーションを複数のハードウェア・システムに分散させて、システムの拡張性とパフォーマンスを改善できる。

 次に、階層型分散アプリケーションを開発するうえで注意すべき点をいくつか例示してみる。

  • 層と層とのインターフェイスを適切に定めなければならない。
  • システムの境界面が増えることや、ネットワーク上に機密データが流れることなど、セキュリティ上考慮しなければならない点が増える。
  • アプリケーションを複数の階層に分割するために多数のクラスを作成することになるので、保守上の問題が起きる場合がある。
  • 複数種類のデータストアを扱う場合、データストアに固有のロジックを適切に隠ぺいしなければならない。

 Application Architecture for .NETでは、このような注意すべき点をどのように設計するかの指針も提示されている。

■Application Architecture for .NETの目次

 AAfNの文書構成を見るために、その目次を抜粋し、翻訳してみる。

第1章 イントロダクション

  • 分散アプリケーション設計の目的
  • サービスとサービス統合
  • アプリケーションおよびサービスにおけるコンポーネントと物理階層(ティア)
  • サンプル・シナリオ

第2章 アプリケーションまたはサービスのコンポーネント設計

  • コンポーネントの種類
  • アプリケーションおよびサービスで一般的に推奨される設計
  • プレゼンテーション層の設計
  • ビジネス層の設計
  • データ層の設計

第3章 セキュリティ、運用管理、通信のポリシー

  • セキュリティ・ポリシー(一般的なセキュリティ原則、認証、承認、安全な通信、プロファイル管理、監査)
  • 運用管理ポリシー(例外管理、モニタリング、設定、メタデータ、サービスの位置)
  • 通信ポリシー(通信モデルの選定、同期、フォーマット、スキーマ、プロトコル)

第4章 物理配置と運用上の要件

  • コンポーネントの配置(物理配置環境、物理配置計画、コンポーネントの分散境界、アセンブリへの分割、コンポーネントのパッケージングと流通)
  • 共通配置パターン(Web UI/リッチクライアント/サービス統合のシナリオ、ビルド/テスト/ステージングの環境)
  • 運用上の要件(スケーラビリティ、可用性、性能、セキュリティ、保守運用)

第5章 補遺

  • マイクロソフト製品との対応
  • 用語集
  • 論理階層(レイヤ)に分割されたアーキテクチャ

 このように、AAfNは設計における問題を広くカバーしている。この文書のすべてを読むことは(日本語への翻訳もまだ公開されていないし)大変だろうが、読者にとって必要と思われる章を拾い読みするだけでも、十分参考になるだろう。

■サンプル・シナリオ

 AAfNでは、具体例を交えながら内容を説明するために、外部のサービスを利用するアプリケーションがサンプルとして用いられている。

 そのサンプル・アプリケーションは、架空の小売業者が用いるアプリケーションである。サンプル・シナリオは以下のとおり。

Application Architecture for .NETのサンプル・シナリオ

小売業者は、Webショッピング・サイトおよび電話での通信販売サービスを提供している
顧客がWebサイトで注文するときは、オンライン・カタログから商品を選べる
顧客が電話で注文するときは、メールオーダー・カタログから商品を選ぶ
電話を受けた営業担当者は、注文詳細をWindowsフォーム・アプリケーションで入力する
注文が完了したら、クレジットカード番号が外部の与信サービスで承認され、商品の配送が外部の宅配便サービスで手配される

 このシナリオですべての分散アプリケーションおよびサービスがカバーできるわけではもちろんないが、推奨されている設計そのものはどのようなシナリオであっても適用できるだろう。

■本文で用いられる用語の意味

 ここで、AAfN本文および本連載で用いるいくつかのあいまいになりがちな用語について、あらかじめその意味を確認しておこう。

・コンポーネント

 AAfN本文では、「コンポーネント」という単語は「ソリューションを構成する部品または部分」という意味で用いられている。従って、.NETアセンブリなどのソフトウェア・コンポーネントだけでなく、例えばWebのページや、マイクロソフトのEAI製品である「BizTalk Server」のオーケストレーションなども含めて「コンポーネント」と呼んでいる。

・サービス

 AAfN本文では、業務サービスを提供する、外部のソフトウェア・コンポーネントを「サービス」と表記している。これには当然XML Webサービスが含まれるが、それに限定されているわけではない。

・論理階層(レイヤ)と物理階層(ティア)

 AAfN本文では、「レイヤ(Layer)」と「ティア(Tier)」を使い分けている。前者はコンポーネントの役割に応じた階層を、後者は物理的な配置の階層を指している。本稿ではそれぞれを、「論理階層(レイヤ)」と「物理階層(ティア)」と表記する。


 INDEX
  [連載] アプリケーション・アーキテクチャ設計入門
  第1回 .NET開発者のための設計ガイドライン
    1.アーキテクチャの重要性と参照アーキテクチャ
  2.Application Architecture for .NETの概略
    3.論理アーキテクチャの全体像
    4.論理アーキテクチャを構成するコンポーネント群
 
インデックス・ページヘ  「アプリケーション・アーキテクチャ設計入門」


Insider.NET フォーラム 新着記事
  • 第2回 簡潔なコーディングのために (2017/7/26)
     ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている
  • 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
     Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう
  • 第1回 明瞭なコーディングのために (2017/7/19)
     C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える
  • Presentation Translator (2017/7/18)
     Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Insider.NET 記事ランキング

本日 月間