PoEAA ch14 Application Controller
Application Controller
A centralized point for handling screen navigation and the flow of an application
- 画面の出し分けに関して複雑なロジックがある場合
- 一連の画面を特定の順番で出す
- ウィザードとか
- 特定の条件下でのみ出す画面がある
- 前の入力によって異なる画面を出す
- 一連の画面を特定の順番で出す
- MVCのC -- Input Controllerが担っても良いが、下記の問題がある
- 複数のコードに同じロジックが散らばってしまう
- 画面フローのロジックをApplication Controllerとして切り出す
- Application Controllerは、Input Controllerからの問い合わせをうけ、コンテキストに応じて次のものを返す
- 制御を移すべきモデル
- 返すべきビュー
How It Works
- 主な責務は2つ:
- どのドメインロジックに制御を移すかを決める
- どのビューを返すかを決める
- 2つのコレクションを用意して、クラスをルックアップする
- 実装方法
- Command Pattern (Gang of Four)
- Application Controllerの層のCommandオブジェクト
- クラス名・メソッド名文字列からリフレクション
- Domain層
- Transaction Script
- Domain Objectのメソッド
- Domain層
- Server Page使用時は、その名前もルックアップに使える
- Command Pattern (Gang of Four)
- Application ControllerはDomainとPresentationの中間層と捉える人が多い
- Application Controllerの再利用に熱心になり過ぎぬよう
- プレゼンテーションが異なるということは、そもそも画面フローを変えたほうがUIとして良かったりする
- 開発コストは下がる
- UIはステートマシン
- ステートマシンのフローをどう表す
- メタデータ
- コードで設定
- コンフィグファイルで設定
- メタデータ
- ステートマシンのフローをどう表す
- Application Logic? Domain Logic?
- 線引きは曖昧
- 例: 保険のアプリケーションで、「喫煙」にチェックを入れた場合のみ、ある画面を表示する
- この種のロジックが何箇所も出てこないならApplication Logicに入れちゃう
- いっぱい出てくるならDomain Logicに移す
When to Use It
- 画面フローがシンプルなら価値は薄い
- 誰もが任意の画面に任意の順番でアクセスできる
- フローを変更するとき、何箇所も直さなくてはならないようなら、適用価値があるきざし
Further Reading
- [Knight and Dai]