1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Web】3層アーキテクチャ vs 3レイヤーアーキテクチャ vs MVC

Last updated at Posted at 2024-08-11

Webアプリーケーション開発では、さまざまな設計パターンが使用されます。その中でも3層アーキテクチャやMVCは非常に有名なものですが、それぞれがどの層を担当しているのか、分かりづらいという事実もあります。そのため、今回の記事では3層アーキテクチャ、3レイヤーアーキテクチャ、MVC、それぞれの違いについてまとめていきます。
 

層(Tier) vs レイヤー(Layer)

層とレイヤーの違いについて見ていきます。

層とレイヤーは同じではありません。 「レイヤー」とは、ソフトウェアの機能部を指しますが、「層」とは、他の部分から分離してインフラストラクチャーで実行されるソフトウェアの機能部を指します。
(引用元)「3層アーキテクチャーとは」

TierとLayerは、和訳するとどちらも「層」になります。そのため、同じ意味で使用されることも多いみたいですが、本記事では上記の通り、層(Tier)とレイヤー(Layer)を区別します。 

層(Tier)とは

層(Tier)は、ソフトウェアの物理的な分離を示す概念です。アプリケーションAとアプリケーションBが異なるサーバー上で動いている時、A層とB層という2つの層が存在することになります。このように、層はサーバーの構成を表す概念です。 

スクリーンショット 2024-08-07 14.07.09.png

レイヤー(Layer)とは

レイヤー(Layer)は、ソフトウェアの機能的な分離を示す概念です。同一サーバー上に存在するアプリケーションを、「ユーザーとやり取りするプログラム」と「データベースとやり取りするプログラム」に分離して考える場合、2つのレイヤーが存在することになります。このように、レイヤーは機能ごとにプログラムを分離します。

下の図からも分かるように、層の中に多数のレイヤーが存在します。
 
スクリーンショット 2024-08-07 14.09.55.png
 

3層アーキテクチャ (3-Tier Architecture)

3層構造と呼ばれることもありますが、本記事では3層アーキテクチャと呼ぶことにします。3層アーキテクチャは、プレゼンテーション層アプリケーション層データ層の3つの層に分かれます。 
 
スクリーンショット 2024-08-10 13.20.34.png

プレゼンテーション層

プレゼンテーション層は、クライアントサイド・サーバーサイドにまたがって存在し、唯一ユーザーと直接やり取りする層です。具体的には、クライアントサイドプレゼンテーション層のWebブラウザを介して、ユーザーに対してデータを表示したり、ユーザーからの入力データを受け取ったりします。そして、Webブラウザは、サーバーサイドプレゼンテーション層に位置するWebサーバに対して、HTTPリクエストを送信します。 
 
Webサーバは、受信したHTTPリクエストを処理して、ただ単にクライアントにHTMLや画像ファイルを送り返す(HTTPレスポンス)こともあれば、アプリケーション層にビジネスロジックの実行を依頼することもあります。

アプリケーション層に処理を依頼した場合、Webサーバはアプリケーション層から実行結果を受け取り、クライアントサイドにHTTPレスポンスを送り返します。すると、HTTPレスポンスを受信したWebブラウザは、その結果を画面に表示します。

Webサーバの役割とWebサーバソフト
クライアントからのリクエストが静的コンテンツであれば、HTMLやCSSを返します。動的コンテンツの場合は、APサーバに処理を依頼し、その処理結果をWebブラウザに返します。
また、Webサーバには、クライアントとHTTPを使用してやり取りする機能を提供するWebサーバソフトがインストールされています。Webサーバソフトには、Apache HTTP ServerやNginxなどがあります。

アプリケーション層

アプリケーション層は、ビジネスロジックを担当し、プレゼンテーション層とデータ層の仲介役として機能します。この層には、アプリケーションサーバ(APサーバ)が設置されます。 
 
APサーバは、Webサーバから送られてきたリクエストに対して、Javaなどのアプリケーションプログラムを実行して、ビジネスロジックの処理を行います。例えば、ユーザー情報の更新やショッピングカートへの商品の追加などの処理が行われます。
これらのビジネスロジック処理の多くは、データの取得や更新を含みます。そのため、APサーバはデータ層とやり取りすることで、データの取得や更新などの処理を行ってもらいます。具体的には、JavaなどのプログラムがSQLでDBサーバに命令を出すことで、データベースからデータを取得します。

そして、データ層から受け取った処理結果をWebサーバに送り返します。

APサーバの役割とAPサーバソフト
APサーバは、アプリケーションプログラムを実行するためのサーバで、動的コンテンツの生成を可能にします。
またAPサーバには、上述の処理を可能にするAPサーバソフトがインストールされています。APサーバソフトには、Apache Tomcatなどがあります。

データ層

データ層には、データベースサーバ(DBサーバ)が設置されます。DBサーバは、DBMS(データベース管理システム)というデータベースに対して処理を行うソフトウェアと、物理的にデータを保持するデータベースで構成されます。
 
DBサーバでは、データのCRUD操作(保存、取得、更新、削除)が行われます。具体的には、アプリケーションプログラムが出力したSQLのクエリを、DBMSが解釈して、データベースに対して処理を行います。これにより、APサーバから送られてきたユーザーの会員情報などをデータベースに保存したり、会員情報の更新を行うことができます。

そして、処理結果をAPサーバに送り返します。

DBMS
DBサーバ上で実行されるDBMSには、MySQLやPostgreSQLなどがあります。

ビジネスロジックとは?

先ほど出てきたビジネスロジックですが、単語だけ聞いてもすごくイメージがしづらいです、、
 
私たちは普段、ECサイトや動画配信サービスなど多くのサービスを使用していますよね。ECサイトだったら、ショッピングカートへの商品の追加、割引クーポンの適用、発送日の指定など様々な機能を利用しています。当たり前ですが、問題なく商品の合計金額が計算されたり、発送日の指定などを行うことができます。これらのサービスに必要不可欠な処理がビジネスロジックに該当します。

3レイヤーアーキテクチャ (3-Layer Architecture)

こちらも3層アーキテクチャと呼ばれることがありますが、本記事では、「3層アーキテクチャーとは」を参照し、3レイヤーアーキテクチャと呼ぶことにします。

3層アーキテクチャは、物理的に3つのサーバを設けることで3つの層を構成しました。一方で、3レイヤーアーキテクチャは、APサーバ内で動くプログラムを、それぞれの関心毎に以下の3つレイヤーに分けます。つまり、3レイヤーアーキテクチャはアプリケーション層に存在します。

スクリーンショット 2024-08-11 13.27.38.png

プレゼンテーション層(プレゼンテーションレイヤー)

プレゼンテーション層は、ユーザーインターフェースを担当します。アプリケーションの利用者が人間であれ、その他のプログラムであれ、この層がアプリケーションの利用者とやり取りを行い、ビジネスロジック層との仲介役になります。Controllerがその役割を担います。

ビジネスロジック層(ビジネスロジックレイヤー)

ビジネスロジック層は、プレゼンテーション層とデータアクセス層の仲介役として機能し、ビジネスロジックを担当します。
プレゼンテーション層から処理の依頼を受けたビジネスロジック層は、データアクセス層とやり取りして必要なデータを取得・処理します。その後、処理結果をプレゼンテーション層に返します。
 
ビジネスロジックは、Serviceが担当します。Controllerメソッドの内部でServiceメソッドが呼び出されます。

データアクセス層(データアクセスレイヤー)

データアクセス層は、ビジネスロジック層と連携してデータの取得・保存を行います。実際には、データアクセス層がSQLを実行することで、データベースに対して命令を出します。そして、DBから取得したデータをビジネスロジック層に返します。

Serviceメソッド内で、DAORepositoryのメソッドが呼びされます。

MVC

MVCという設計パターンも存在します。MVCは、3レイヤーアーキテクチャのプレゼンテーション層周辺のアーキテクチャです。
 
スクリーンショット 2024-08-11 13.09.30.png
 

Model

Model(モデル)は、アプリケーションが扱うデータの管理・保持とビジネスロジックを担当します。

Modelがこの2つの処理を行うと、ファットモデルというModelの役割が多すぎる問題が発生するので、Modelはデータ管理のみを担当し、Serviceがビジネスロジックを行うことで役割を分担することができます。

View

View(ビュー)は、ユーザーインターフェースを担当します。Viewは、Modelから提供されたデータをユーザーに表示し、ユーザーからの入力をコントローラに渡します。

Controller

Controller(コントローラ)は、ユーザーからのリクエストを処理し、それに基づいてModelとViewの制御を行います。ModelとViewの間の仲介役として機能します。

MVCをもう少し詳しく

ここでModel、View、Controllerがやり取りする様子を見てみます。
 
スクリーンショット 2024-08-10 16.18.21.png
 

  1. ユーザーからの入力
    ユーザーがまずViewで操作を行います。
     
  2. ViewからControllerへ
    Viewはユーザーからの入力を受け取ると、それをControllerに渡します。
     
  3. Controllerの処理
    Controllerはユーザーからの入力を受け取り、それを解釈して適切なModelにビジネスロジックの処理を要求します。
     
  4. Modelによるビジネスロジック
    Modelがビジネスロジックを実行する過程で、必要に応じてデータを更新し、そのデータをModelが保持します。そして、処理結果をコントローラに返します。
     
  5. ControllerからViewへの通知
    Controllerは、Modelから受け取った結果をもとに、Viewに更新を指示します。
     
  6. Viewの更新
    Viewは、更新されたデータをModelから取得し、画面を更新します。
     
  7. Viewが更新されたUIを表示
    Viewは、更新されたUIを表示します。

 
詳細は以下:

まとめの図

以下が、3層アーキテクチャ(3-Tier Architecture)、3レイヤーアーキテクチャ(3-Layer Architecture)、MVCのまとめの図になります。
 
スクリーンショット 2024-08-14 14.27.59.png

参照

1
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?