きっかけ
MVCとかMVVMとかクリーンアーキテクチャとかそれぞれどの部分の設計思想なのか分かりずらすぎるからまとめたいと思った。
注意事項
本記事は筆者が初学者として学んだ内容をまとめたものです。MVC、MVVM、MVPの解釈や各アーキテクチャとの対応関係について、厳密な定義と異なる可能性があります。
Webアプリケーションの構成
一般的にwebアプリケーションはwebサーバ, アプリケーションサーバ, DBサーバの3つで構成される。
アプリケーションサーバの構成
アプリケーションサーバ内部の構成はどんなものがあるのかみていく。
3層アーキテクチャ
ややこしいことに、サーバの構成と同じく3層アーキテクチャと呼ぶ。混同しないように注意。
システム全体を以下の3層に分ける。
-
プレゼンテーション層(UI層)
ユーザーとのインターフェース(例:Webページ、モバイル画面) -
アプリケーション層(ビジネスロジック層)
業務処理やビジネスルールを実装 -
データロジック層
データベースやリポジトリなど、データの永続化を担当
各設計パターンとの対応例:
設計パターン | 3層アーキテクチャでの対応例 |
---|---|
MVC |
Controller と View → プレゼンテーション層Model → アプリケーション層(ビジネスロジック) |
MVVM |
View と ViewModel → プレゼンテーション層Model → アプリケーション層(ビジネスロジック) |
MVP |
View と Presenter → プレゼンテーション層Model → アプリケーション層(ビジネスロジック) |
レイヤードアーキテクチャ
レイヤードアーキテクチャは、以下の4層でシステムを構成する。
-
プレゼンテーション層(UI層)
ユーザーインターフェースの実装 -
アプリケーション層(サービス層)
ユースケースや業務ロジックの調整 -
ドメイン層(ビジネスルール)
ビジネスの中心となるルールやエンティティ -
インフラストラクチャ層
データベース、外部API、その他技術的な基盤
各設計パターンとの対応例:
設計パターン | レイヤードアーキテクチャでの対応例 |
---|---|
MVC |
Controller → プレゼンテーション層Model → ドメイン層View → プレゼンテーション層 |
MVVM |
ViewModel → プレゼンテーション層Model → ドメイン層View → プレゼンテーション層 |
MVP |
Presenter → プレゼンテーション層Model → ドメイン層View → プレゼンテーション層 |
ヘキサゴナルアーキテクチャ
ヘキサゴナルアーキテクチャは、以下の要素で構成され、システムのコア(ドメイン)と外部との依存関係を明確に分離する。
-
ドメイン層(アプリケーションのコア)
ビジネスルールやエンティティを実装 -
ポート
ドメイン層が外部と通信するためのインターフェースの定義 -
アダプタ
UI、データベース、APIなど、外部システムとの接続部分の実装
各設計パターンとの対応例:
設計パターン | ヘキサゴナルアーキテクチャでの対応例 |
---|---|
MVC |
Model → ドメイン層Controller と View → アダプタ層(ポートを介してドメインと連携) |
MVVM |
Model → ドメイン層ViewModel と View → アダプタ層 |
MVP |
Model → ドメイン層Presenter と View → アダプタ層 |
オニオンアーキテクチャ
オニオンアーキテクチャは、システムの中心にドメイン(コアビジネスロジック)を据え、その周囲にアプリケーション層、インフラ層、プレゼンテーション層を配置して依存関係の逆転を実現する。
-
ドメイン層
システムの中核となるビジネスロジック・エンティティ -
アプリケーション層
ユースケースの実装や、ドメイン層と外部の橋渡し -
インフラストラクチャ層
データベース、外部APIなどの技術的基盤 -
プレゼンテーション層
UIやAPIなど、ユーザーとの接点
各設計パターンとの対応例(※Controller/Presenter/ViewModelはアプリケーション層に位置づける場合もあります):
設計パターン | オニオンアーキテクチャでの対応例 |
---|---|
MVC |
Controller → アプリケーション層Model → ドメイン層View → プレゼンテーション層 |
MVVM |
ViewModel → アプリケーション層Model → ドメイン層View → プレゼンテーション層 |
MVP |
Presenter → アプリケーション層Model → ドメイン層View → プレゼンテーション層 |
クリーンアーキテクチャ
クリーンアーキテクチャは、依存関係の逆転原則に基づいてシステムを以下の4層に分割し、内側ほど抽象度が高くビジネスロジックに集中する。
-
エンティティ層
ビジネスルールやエンティティなど、システムの核となる部分 -
ユースケース層
アプリケーション固有のビジネスロジックや処理の流れ -
インターフェースアダプタ層
Controller、Presenterなど、外部と内部の橋渡しを行う -
フレームワーク&ドライバ層
UI、データベース、外部API、Webフレームワークなど、技術的な実装
各設計パターンとの対応例:
設計パターン | クリーンアーキテクチャでの対応例 |
---|---|
MVC |
Controller → インターフェースアダプタ層Model はエンティティ層とユースケース層にまたがるView → フレームワーク&ドライバ層 |
MVVM |
ViewModel → インターフェースアダプタ層Model はエンティティ層とユースケース層にまたがるView → フレームワーク&ドライバ層 |
MVP |
Presenter → インターフェースアダプタ層Model はエンティティ層とユースケース層にまたがるView → フレームワーク&ドライバ層 |
クリーンアーキテクチャをより詳しく
参考資料