MVP パターンの記事に書くかもなこと
考え途中なので当てにしないでね><
- 大きな選択肢
- Presenter のライフサイクル
- View インターフェイスの粒度
- UI コントロールのプロパティレベルを操作
- 例 : string titleTextBox_Text { set; }
- より多くのプレゼンテーションロジックをテストできる
- Presenter の実装やインターフェイスは結構複雑になる
- データバインドは不向き
- View は Model を (ほぼ) 意識しない
- 複数データを扱う場合は Table を使って TableRow を動的生成 (データバインドではインターフェイスの粒度が粗くなる)
- TableRow を継承 (あと Presenter から扱えるようにインターフェイスも) し、タイプセーフに扱う。
- 例 : class BookTableRow : TableRow, IBookTableRow
- 動的生成は必ず Page.Init で行う
- TableRow を継承 (あと Presenter から扱えるようにインターフェイスも) し、タイプセーフに扱う。
- Model をやりとり
- 例 : void SetBook(Book target);
- テスト対象から外れるプレゼンテーションロジックが多くなる
- Presenter の実装やインターフェイスは結構綺麗になる
- UI コントロールのプロパティレベルを操作
- 一機能で複数画面があるとき
- Presenter を毎回生成する場合、ビジネスファサードの受け渡しとかの管理が複雑になる
- Presenter をセッションに入れる場合、Presenter のライフサイクルの管理が複雑になる
- 対策
- 一機能につき一つの aspx にし、ascx (+ MultiView) で擬似的に複数画面を表現
- 各機能毎にゲートとなるページ (ex:Gate.aspx) を用意
- ゲートでセッションに格納して本来の開始ページにリダイレクトすれば良い
- GatePresenter
と FunctionalPresenter を用意しておき、これを継承すると良い - Presenter を毎回生成しビジネスファサードをセッションに格納する場合のみ可
- 毎回生成の場合の Page とか Presenter の 継承
- Presenter
と GatePresenter と FunctionalPresenter を用意しとくと良い - IView を用意しとくと良い
- MvpPage クラス を用意しとくと良い (IView も実装)
- Presenter