MVC、MVP、およびMVVMデザインパターンの調査

ユーザーインターフェイスには、主に処理する必要のある複雑なロジックのために、多くの雑然としたコードが含まれていることがよくあります。プレゼンテーションパターンは、主に1つの目的を念頭に置いて設計されており、プレゼンテーション層の複雑なコードを削減し、ユーザーインターフェイスのコードをクリーンで管理しやすくします。この投稿では、MVC、MVP、およびMVVMのデザインパターンについて説明し、どちらを選択するかを強調します。

Model View Controller

Model View Controller(一般にMVCとして知られている)フレームワークは、テストと保守がより簡単なアプリケーションを構築するのに役立ちます。これは、次の3つの主要コンポーネントで構成されています。

  1. モデル-これは、アプリケーションのデータを表すレイヤーです
  2. ビュー-これは、プレゼンテーションまたはユーザーインターフェイスレイヤーを表します
  3. コントローラー-このレイヤーには通常、アプリケーションのビジネスロジックが含まれます

MVCデザインパターンの主な目的は、テスト容易性を促進するための関心の分離です。Model View Controllerのデザインパターンを使用すると、懸念事項を切り分けて、アプリケーションのコードのテストと保守を容易にすることができます。典型的なMVC設計では、要求は最初に、モデルを対応するビューにバインドするコントローラーに到着します。MVCデザインパターンでは、ビューとコントローラーはストラテジーデザインを利用し、ビューとモデルはオブザーバーデザインを使用して同期されます。したがって、MVCは複合パターンであると言えます。コントローラーとビューは疎結合であり、1つのコントローラーを複数のビューで使用できます。ビューはモデルの変更をサブスクライブします。

モデルビュープレゼンター

MVP(Model View Presenter)デザインパターンも、モデル、ビュー、プレゼンターの3つのコンポーネントで構成されています。MVPデザインパターンでは、コントローラー(MVC内)がプレゼンターに置き換えられます。MVCデザインパターンとは異なり、Presenterはビューを参照します。これにより、ビューのモックが簡単になり、MVCデザインパターンよりもMVPデザインパターンを利用するアプリケーションの単体テストがはるかに簡単になります。MVPデザインパターンでは、プレゼンターがモデルを操作し、ビューを更新します。このデザインには2つのバリエーションがあります。これらには以下が含まれます。

  1. パッシブビュー-この戦略では、ビューはモデルを認識せず、プレゼンターはモデルの変更を反映するようにビューを更新します。
  2. 監督コントローラー-この戦略では、ビューはモデルと直接対話して、プレゼンターの介入なしにデータをデータコントロールにバインドします。プレゼンターはモデルの更新を担当します。複雑なユーザーインターフェイスロジックを実行する必要がある場合は、必要な場合にのみビューを操作します。

これらのバリアントは両方ともプレゼンテーションロジックのテスト容易性を促進しますが、主にプレゼンター内にすべてのビュー更新ロジックがあるため、テスト容易性に関する限り、パッシブビューバリアントが他のバリアント(監視コントローラー)よりも優先されます。

アプリケーションが複数のユーザーインターフェイステクノロジのサポートを提供する必要がある場合は、MVCよりもMVPデザインパターンが優先されます。また、ユーザーとのやり取りが多い複雑なユーザーインターフェイスがある場合にも適しています。アプリケーションのユーザーインターフェイスで自動化された単体テストが必要な場合は、MVPデザインパターンが従来のMVCデザインよりも適しています。

モデル-ビュー-ViewModel(MVVM)

Model-View-ViewModel(MVVM)は、MartinFowlerのプレゼンテーションモデルデザインパターンのバリエーションです。 MVVMは、人気のあるMVCデザインを改良したものであり、MVVMのViewModelは、プレゼンテーションの分離を容易にするために使用されます。 MVVMでは、ロジックはプレゼンターに格納され、ビューはモデルから完全に分離されています。プレゼンターはビューを認識していませんが、ビューはプレゼンターを認識しています。MVVMのプレゼンターは、ユーザーインターフェイスの抽象的なビューを表すために使用されます。パッシブビューは、ビューにモデルの知識がないことを意味します。 MVVMデザインパターンでは、ビューはアクティブであり、動作、イベント、およびデータバインディング情報が含まれています。 MVVMのビューは、状態情報の管理を担当しないことに注意してください。ビューは、ビューモデルと同期されます。MVVMのビューモデルは、プレゼンテーションの分離を担当し、ビューの状態を管理してモデルを操作するためのメソッドとコマンドを公開します。

MVVMのビューとビューモデルはどのように通信しますか?MVVMのビューとビューモデルは、メソッド、プロパティ、イベントを使用して通信します。ビューとビューモデル間の双方向データバインディングまたは双方向データバインディングにより、ビューモデルのモデルとプロパティがビューと同期します。MVVMデザインパターンは、双方向データバインディングのサポートが必要なアプリケーションに最適です。