Two Step View
Turns domain data into HTML in two steps:
first by forming some kind of logical page,
then rendering logical page into HTML.
-
ページが多数あるWebアプリケーションにおいて、一貫した見た目と構造にしたい
- さもないとユーザが混乱する
-
Template ViewやTransform Viewでは実現が難しい
-
プレゼンテーションロジックが各ビューに散らばるから
- 【補】どちらかといえばTransform Viewのほうがまだ共通化しやすい
-
- 1箇所直せば全ページに変更が範囲されるようにしたい
-
データからHTMLへの変換を2段に分割することでこれを実現する
- 1段目: 論理的なプレゼンテーションに変換
- 2段目: 実際のフォーマットに変換
- 2段目を修正すれば前ページに見た目の変更が反映される
How It Works
-
Logical Screen
- 1段目の変換で出力されるプレゼンテーション指向な中間形式
-
次のようなメンバをもつかも
- ヘッダ
- フッタ
- テーブル
- 選択UI
- etc.
-
1段目の変換: ドメイン指向のモデルからプレゼンテーション指向のデータ構造への変換
-
ドメイン指向のモデル
- DB
- ドメインモデル
- DTO
-
-
2段目の変換: プレゼンテーション指向のデータ構造からHTMLへの変換
- データ構造の各要素について認知しており、HTMLへのレンダリング方法を知っている
- 出力結果は当然、Logical Screenから導出可能なものでなければならない
- 実装方法はさまざま
-
一番簡単なのはXSLT
- 1段目: ドメイン指向のXMLからプレゼンテーション指向のXMLに変換
- 2段目: プレゼンテーション指向のXMLからHTMLに変換
-
別の方法: クラスを使う
-
プレゼンテーション指向のデータ構造を複数のクラスで構成
- テーブルクラス
- 行クラス
- 1段目: ドメインの情報を受けとり、これらのクラスをインスタンシエート
-
2段目: これらのクラスのインスタンスを受けとり、HTMLをレンダリング
- インスタンス自身がHTMLへのレンダリング方法を知っていてもよい
-
- 上記いずれの方法もTransform Viewベース
-
Template Viewでもできる
- 中間形式ではカスタムタグを用いる
- HTML用のWYSIWYGエディタは使えない
When to Use It
-
変換を2段に分けることがキモ
- サイト全体への変更を容易にする
-
複数の見た目を容易するのにも役立つ
- 比較的レアケースだが増加しつつある(書籍執筆当時)
- e.g. 顧客ごとに変えるとか
-
ロジックの重複をなくし、数を減らす
- Two Step Viewを採用しない場合、
ページ数 x 見た目
の種類の変換ロジックが必要 - Two Step Viewを採用すれば、
ページ数(1st stage) + 見た目(2nd stage)
ですむ - 【所感】Gang of FourのBridge Patternに似てますね
- Two Step Viewを採用しない場合、
- プレゼンテーション指向の中間データ構造をどれだけうまく作れるかがキモ
-
デザインに凝ったWebサイトではうまくいかないことも
- ページ1つ1つが異なりすぎて共通点を見いだせない
-
弱点
-
HTML関連ツールが使えない・デザイナとプログラマが分業できない
- Template Viewと比較しての弱点
-
慣れないと実装が難しい
- モジュールの呼び出しのレイヤーが増える
- ひとたび慣れさえすれば、定形コードの繰り返しを減らしてくれるのだが
-
-
別々のデバイス向けに複数の2nd stageを用意する、ということも可
- ブラウザ用とPDA用とか
- 【補】HTML用とCSV用、とかもこの類かな?
Example: Two Stage XSLT (XSLT)
- 前述の説明どおりのやつ
Example: JSP and Custom Tags (Java)
- 1段目の変換ではJSPでカスタムタグを書き出す
- 2段目の変換でカスタムタグをHTMLにレンダリングする
- 著者いわく、現場で見たことはないらしい
-
XSLTと比較してのメリデメ
-
メリ
- 「全ページ同じ見た目」の強制力はXSLTと比較して低い
-
デメ
- デザインに凝ったページで微調整が効く
-