多層アーキテクチャ

多層アーキテクチャ（たそうアーキテクチャ、）とは、ソフトウェアアーキテクチャパターンである。

アプリケーションを複数の"層"に分け、それらを独立したモジュールとして開発・保守する。各層はインタフェースを定義しモジュール化されたソフトウェアであり、テクノロジーの進歩や要求の変化に合わせて各層を個別に置換できる。

各層をそれぞれ異なるプラットフォーム上で動かし、層ごとにプラットフォームの変更が可能である。
例えばクライアントのオペレーティングシステムをMicrosoft WindowsからUNIXに変更しても、他の層（ビジネス層、データベース層など）は変更しない。

多層アーキテクチャの起源と変遷 
「三層（または）」という用語や「多層アーキテクチャ」という用語はラショナルが起源とされている。
一般に、tierは物理的に異なるサーバ、layerはソフトウェア上の役割分担であると解釈されることが多い。日本語ではどちらも層と訳されてしまうため、英語の原義を確認することは重要である。ただし英語でtierと書かれていてもソフトウェア的な役割分担を意味している場合もあるため、非常に厄介ではある。

また、時代と共に意味の範囲が揺れていることにも留意が必要である。例えば、アナリシスパターン(1996)、エンタープライズ アプリケーションアーキテクチャパターン(2002）はともにマーティンファウラーがまとめた書籍だが、用語定義に変遷がみられる。別の例では、AAG(2009)は、AAfN(2003)の改訂版である。

多層アーキテクチャの例 
アプリケーションが複数のソフトウェアエージェントによって実行されるクライアントサーバモデルの一形態である。例えば、ユーザーとデータベース間のデータ要求サービスにミドルウェアを利用するアプリケーションは多層アーキテクチャである。代表的な多層アーキテクチャに三層アーキテクチャがある。

三層アーキテクチャ 
クライアントサーバモデルにおける「三層」とは、
 ユーザインタフェース
 ビジネスロジック
 データベース（およびデータアクセス）
である。

ユーザインタフェースは、デスクトップPCやワークステーション上で標準のGUIを使って動作するのが一般的である。ビジネスロジックは1つ以上のモジュールで構成され、ワークステーションやアプリケーションサーバ上で動作する。データベースにはサーバやメインフレーム上のRDBMSが使われる。中間層自体が多層化されることもある。

三層(3 layer)アーキテクチャでの各層の名称は以下の通り。

IPA
アナリシスパターン
AAfN, AAG
古典DDD

MVCアーキテクチャとの比較 
一見したところ、三層アーキテクチャは、 Model View Controller (MVC) に似ている。しかし、トポロジー的には異なっており、適用分野も異なる。三層アーキテクチャの基本原則として、プレゼンテーション層は決してデータ層と直接通信せず、全ての通信は必ず中間層を通過するというものがある。したがって、三層は一本の直線で表される。それに対して、 MVCでは 3つがそれぞれ相互に通信するため、三角形を形成している。つまり、三層アーキテクチャはデータベースとユーザーの間の情報経路を表しているのに対して、MVCはユーザインタフェースにおける画面上のコンポーネントの管理方法を表している。MVCに基づくコンポーネントは、三層アーキテクチャのアプリケーションでもよく使われる。

歴史的に見れば、三層アーキテクチャは1990年代に生まれたものである。これは、Webアプリケーションなどの分散システムにおいて、クライアント、ミドルウェア、データベースの3者がそれぞれ物理的に別のプラットフォームで動作するようになったことから生じたものである（つまり、実装が先にあって、後から概念として抽象化された）。一方、MVCは1980年代（パロアルト研究所での1970年代末から1980年代初期にかけてのこと）に、1つのグラフィカルワークステーション上で動作するアプリケーション群の仕組みから生まれた。MVCが分散アプリケーションに適用される（コンテンツとプレゼンテーションの分離がされた）のはもっと後のことである。

Web開発での利用 
Web開発の分野では、三層モデルはウェブサイト、特に電子商取引のウェブサイトの構成の説明に使われる。その場合、各層は以下のようになる。
 プレゼンテーション層: 変化しないコンテンツを供給するWebサーバ
 中間層: 動的コンテンツを生成するアプリケーションサーバ。例えばJakarta EEプラットフォームなど。
 データ層: データベースとその管理システム。RDBMSなど。

参考文献

脚注

関連項目 
 ウェブアプリケーション
 ビジネスロジック
 リッチインターネットアプリケーション (RIA)
 クライアントサーバモデル
 フロントエンド
 Model View Controller (MVC)
 SAP R/3 は三層モデルを使ったクライアントサーバ型アプリケーションである。

ソフトウェア工学用語
ソフトウェアアーキテクチャ
ウェブ開発