勉強日記

チラ裏

PoEAA ch14 Template View

martinfowler.com


Template View

Renders information into HTML by embedding markers in an HTML page.

  • 文字列操作でビュー(HTML)を作るのはつらい
  • HTMLベースで、動的な情報を入れる場所を「マーカー」として埋め込む

How It Works

  • 自分で作る代物ではないので、使い方の「有るべき論」について

Embedding the Markers

  • カスタムタグ vs それ以外
    • カスタムタグ
      • <>WYSIWYGエディタにより特別扱いされる
    • それ以外
      • 【補】{{}}とか
      • タグではないのでWYSIWYGエディタ上でそのまま表示される
        • スペルチェックとかで鬱陶しいかも
  • Server Page
    • ASP, JSP, PHP
    • scriptletsでロジックを書ける
    • 大きな問題を孕んでいるので利用を制限したほうがよい
      • better off (忠告)
  • Template Viewにロジックを書くとここが良くない
    • プログラマが触れなくなる
      • デザイナーさんとか
    • Viewは、ロジックを記述するにはモジュールとしてpoor
    • レイヤードアーキテクチャ崩壊
      • ドメインロジックがViewに散らかって重複してしまったりする

Helper Object

  • ロジックを閉じ込めて、呼び出すだけにする
  • 効能
  • これ自体は単純で賞賛すべき原則だが、もっと込み入った問題もある

Conditional Display

  • 条件分岐して出し分けるやつとか
  • 汎用の<IF>みたいなタグを使うのはくさい
    • 【補】Laravelでいうと@if - @endif
    • 避けられないこともあるが、できるだけ避ける
  • 回避方法1: helperに条件分岐ロジックを移す
  • 回避方法2: 単なる<IF>ではないカスタムタグを用意する

これは良くない:

<IF expression = "isHighSelling()"><b></IF>
<property name = "price" />
<IF expression = "isHighSelling()"></b></IF>

こうする

<highlight condition = "isHighSelling" style = "bold">
  <property name = "price" />
</highlight>

Iteration

  • Conditional Displayと似た問題をはらむ

When to Process

  • Template Viewというパターン名からしMVCのVを意識している
  • Template Viewの責務がVの範疇を超える場合はhelperに処理を切り出すこと
  • 例外はhelperで捕まえること
    • さもないと描画途中のページが出力されてしまったりする

Using Scripts

  • Template View styleで書けるのは「server pages」だけではない
    • 【補】HTMLを一部place holderで置き換えている・scriptletを実行できるものを言っている
  • scriptでも書ける
    • perlCGI.pmとか
    • 関数コールでマークアップを構築する
      • 文字列結合操作をさける
    • 【補】こういうやつ
print $q->ul(
        $q->li('高機能アクセスカウンター'),
        $q->li('RevoCounter')
);

When to Use It

  • MVCのV
  • Template View vs. Transform View
  • Template Viewのメリデメ
    • メリ
      • ページ構造を見ながら作り込める
      • デザイナとプログラマとの分業
    • デメ
      • Viewに複雑なロジックを持ち込めてしまう
        • 自制・自律を要する
      • テストしづらい
        • Webサーバーと密結合しているとアプリケーション単体でテストできない
  • Two Step Viewを採用する場合はTransform Viewのほうが簡単
    • 【補】Domain Model XML --XSLT(1st stage)--> Logical Screen XML --XSLT(2nd stage)--> HTML
      • XSLT(2nd stage)を使いまわす

Example


英語

  • clunky
    • 不器用な
  • at the cost of
    • 〜を代償に
  • disdain
    • 軽蔑する