教材
Presentation Modelを参考にします。
特徴
プレゼンテーションモデルはユーザーインターフェイスの状態を持つ
ビジュアル表示に関する処理とユーザー インターフェイスの状態や動作に関する処理をそれぞれ個別のクラス (ビューとプレゼンテーション モデル) で行います。
プレゼンテーションモデルはユーザー インターフェイスの状態
を持ちます。
また動作
も持ちます。分割方針は、ほぼMVVMと一緒です。
(そも、MVVMは、Presentation Modelの派生という認識です。)
ビューはプレゼンテーションモデルを更新
プレゼンテーション モデル クラスは、モデルへのアクセスをカプセル化して、ビューから簡単に使用できるパブリック インターフェイスを提供する
ビューが更新するのはプレゼンテーションモデルです。
モデルを直接更新しません。次のような役割と考えられます。
- モデル更新の主な処理はプレゼンテーションに定義する
- ビューのイベントハンドラーでプレゼンテーションモデルを呼び出す
MVCで扱いに困る、コントローラー内の「モデルを更新するか、モデルを更新せずにビューだけ更新する」ロジックはプレゼンテーションロジックに定義できます。
ビューはプレゼンテーションモデルの状態を見て更新
プレゼンテーション モデルはモデルの更新、照会、監視を行います。また、ビジュアルコンテンツ内の変更をビューに通知します。
プレゼンテーションモデルはモデルを監視し、状態を自身に反映し、ビューに変更を通知します。
プレゼンテーションモデルにテスト用のドライバーをつければ、プレゼンテーションモデルの状態管理をテストできます。
世界観
データ バインドは、一般に、サーバーまたはローカルの構成データをフォームやその他の UI コントロールに配置して使用します。
Microsoft AccessでDataGridにデータベースをつないで表示、編集する世界観の延長です。
データベースを他のモデルに拡張するためにプレゼンテーションモデルで抽象化します。
原始MVCとの違い
同じ役割分担
分け方に違いはありません。
原始MVCのコントローラーは以下の役割を持ちます。
- モデルの更新
- モデルと関わらないビューの状態管理(選択状態、下書き)
- ビューの更新
プレゼンテーションモデルの役割と一致します。
MVCでの「モデルと関わらないビューの状態管理」
MVCでは「モデルと関わらないビューの状態管理」はモデルには入りません。
なぜならMVCでは次の手順で役割を分けます
- ビジネスロジックとプレゼンテーションロジックをわけ、ビジネスロジックをモデルとする
- プレゼンテーションロジックを入力と出力にわけ、入力をコントローラー、出力をビューとする
「モデルと関わらないビューの状態」はビジネスロジックではありません。
つまりモデルではありません。
原始MVCに追加する制約
- 必ず監視コントローラーを使う
- 二つの監視コントローラー
- ビュー -> プレゼンテーションモデル
- プレゼンテーションモデル -> モデル
MVCでは監視コントローラーは必須ではない
The Model-View-Controller (MVC) Its Past and Presentでは、別のパターンとして紹介されています。
- P-7: INPUT/OUTPUT SEPARATION(MVC/1980)
- P-11: SYNCHRONIZE MODEL AND VIEW
メリット・デメリット
メリット:「モデルと関わらないビューの状態管理」がテスト可能に
デメリット:プレゼンテーションモデルとモデルで状態を二重管理
モデルからプレゼンテーションモデルへの状態反映が自動化できれば、ノーコストで「テスト可能なビューの状態」が手に入ります。
(現実の歴史では、絵に描いた餅になります。)
残課題
- MVVMとPMの違いが不明
- Presentation Modelを通したより詳しい理解