1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

デザインパターン - その2 (MVP, MVVM, MVC)

Last updated at Posted at 2025-01-05

はじめに

MVP, MVVM, MVCのデザインパターンについて記載していく。
なんとなく理解しているが、それぞれの違いを明確に説明はできないな、、と思い改めて学び直してみた。

それぞれの違い

特徴 MVC MVVM MVP
データフロー View → Controller → Model → View View ↔ ViewModel ↔ Model View ↔ Presenter ↔ Model
Viewの役割 UI表示、ユーザー入力の検知 UI表示、ユーザー入力の検知、ViewModelの変更を監視 UI表示、ユーザー入力をPresenterに通知
Modelの役割 ビジネスロジックとデータ処理 ビジネスロジックとデータ処理 ビジネスロジックとデータ処理
中間層の役割 Controller: ユーザー入力処理、Modelの更新指示 ViewModel: ViewとModelの仲介、データバインディングやUI表示ロジック Presenter: ViewとModelの全通信を仲介、UI表示ロジック
データ更新の仕組み Viewがモデルの変更を監視 データバインディングによる自動更新 Presenterが明示的にViewを更新
学習曲線 低い 高(データバインディングの概念学習など)

Modelで実装するビジネスロジックについて
アプリケーションの中核となる処理や規則をModelで実装します。
例:
 商品の在庫管理ロジック
 ユーザーの認証プロセス
 複雑な計算処理
これらの処理は、他の層から独立(切り離して)して実装する。

図で表してみた

3つのデザインパターンについて、同じ図を用いて表現してみた。
同じ図なので、それぞれの差異が分かり易いと思う。

MVC

一番シンプル
スクリーンショット 2025-01-05 19.59.11.png

MVVM

肝はデータバインディング
スクリーンショット 2025-01-05 19.59.28.png

MVP

処理の順番が分からないと辛いので、この図だけ処理の順番を番号で振ってる。
スクリーンショット 2025-01-05 19.59.37.png

MVPとMVVMの違い

図的にも似通っているようにも見えるのが、本質は結構違う。
パッと見分かりづらいと思うので、以下に違いを記載する。

データバインディング

MVVMの最大の特徴は、ViewとViewModelの間で双方向のデータバインディングを使用することです。これにより、ViewModelの状態が変更されると自動的にViewが更新されます。
一方、MVPではPresenterがViewを直接更新します。

責任の分離

MVP: Presenterは、ViewとModelの間の仲介役として機能し、Viewの更新を直接制御します。
MVVM: ViewModelは、Viewに必要なデータと操作を提供しますが、Viewの直接的な制御は行いません。

テスト容易性

MVVMは、ViewModelとViewの疎結合により、ユニットテストがより容易になります。
MVPもテスト容易性が高いですが、PresenterとViewの結合がMVVMよりも強くなる傾向があります。

実装の複雑さ

MVP: 比較的シンプルで、既存のMVCプロジェクトからの移行が容易です4。
MVVM: データバインディングの概念や関連ライブラリ(例:RxSwift)の理解が必要で、学習曲線が急な傾向があります。

適用シナリオ

MVP: 小規模から中規模のプロジェクトに適しており、既存のコードベースへの導入が容易です。
MVVM: 中規模から大規模のプロジェクトに適しており、特に複雑なUIロジックを持つアプリケーションに効果的です。

1
2
1

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
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?