LoginSignup
3
2

More than 5 years have passed since last update.

Presentation Modelパターンの学習メモ

Posted at

教材

Presentation Modelを参考にします。

特徴

プレゼンテーションモデルはユーザーインターフェイスの状態を持つ

ビジュアル表示に関する処理とユーザー インターフェイスの状態や動作に関する処理をそれぞれ個別のクラス (ビューとプレゼンテーション モデル) で行います。

プレゼンテーションモデルはユーザー インターフェイスの状態を持ちます。
また動作も持ちます。分割方針は、ほぼMVVMと一緒です。
(そも、MVVMは、Presentation Modelの派生という認識です。)

ビューはプレゼンテーションモデルを更新

プレゼンテーション モデル クラスは、モデルへのアクセスをカプセル化して、ビューから簡単に使用できるパブリック インターフェイスを提供する

ビューが更新するのはプレゼンテーションモデルです。
モデルを直接更新しません。次のような役割と考えられます。

  • モデル更新の主な処理はプレゼンテーションに定義する
  • ビューのイベントハンドラーでプレゼンテーションモデルを呼び出す

MVCで扱いに困る、コントローラー内の「モデルを更新するか、モデルを更新せずにビューだけ更新する」ロジックはプレゼンテーションロジックに定義できます。

ビューはプレゼンテーションモデルの状態を見て更新

プレゼンテーション モデルはモデルの更新、照会、監視を行います。また、ビジュアルコンテンツ内の変更をビューに通知します。

プレゼンテーションモデルはモデルを監視し、状態を自身に反映し、ビューに変更を通知します。
プレゼンテーションモデルにテスト用のドライバーをつければ、プレゼンテーションモデルの状態管理をテストできます。

世界観

データ バインドは、一般に、サーバーまたはローカルの構成データをフォームやその他の UI コントロールに配置して使用します。

Microsoft AccessでDataGridにデータベースをつないで表示、編集する世界観の延長です。
データベースを他のモデルに拡張するためにプレゼンテーションモデルで抽象化します。

原始MVCとの違い

同じ役割分担

分け方に違いはありません。
原始MVCのコントローラーは以下の役割を持ちます。

  • モデルの更新
  • モデルと関わらないビューの状態管理(選択状態、下書き)
  • ビューの更新

プレゼンテーションモデルの役割と一致します。

MVCでの「モデルと関わらないビューの状態管理」

MVCでは「モデルと関わらないビューの状態管理」はモデルには入りません。
なぜならMVCでは次の手順で役割を分けます

  1. ビジネスロジックとプレゼンテーションロジックをわけ、ビジネスロジックをモデルとする
  2. プレゼンテーションロジックを入力と出力にわけ、入力をコントローラー、出力をビューとする

「モデルと関わらないビューの状態」はビジネスロジックではありません。
つまりモデルではありません。

原始MVCに追加する制約

  1. 必ず監視コントローラーを使う
  2. 二つの監視コントローラー
    1. ビュー -> プレゼンテーションモデル
    2. プレゼンテーションモデル -> モデル

MVCでは監視コントローラーは必須ではない

The Model-View-Controller (MVC) Its Past and Presentでは、別のパターンとして紹介されています。

  • P-7: INPUT/OUTPUT SEPARATION(MVC/1980)
  • P-11: SYNCHRONIZE MODEL AND VIEW

メリット・デメリット

メリット:「モデルと関わらないビューの状態管理」がテスト可能に
デメリット:プレゼンテーションモデルとモデルで状態を二重管理

モデルからプレゼンテーションモデルへの状態反映が自動化できれば、ノーコストで「テスト可能なビューの状態」が手に入ります。

(現実の歴史では、絵に描いた餅になります。)

残課題

3
2
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
3
2