PoEAA ch14 Two Step View

PoEAA勉強メモ

出典: 


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に似てますね
  • プレゼンテーション指向の中間データ構造をどれだけうまく作れるかがキモ
  • デザインに凝った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と比較して低い
    • デメ

      • デザインに凝ったページで微調整が効く