PoEAA ch14 Template View

PoEAA勉強メモ

出典: 


Template View

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

  • 文字列操作でビュー(HTML)を作るのはつらい

    • WYSIWYGエディタが使えない
    • デザイン作業にプログラマが参加しなければならない
  • 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

  • ロジックを閉じ込めて、呼び出すだけにする
  • 効能

    • シンプル

      • 非プログラマもViewを触りやすくなる
      • プログラマもhelperの中身を実装することに集中できる
  • これ自体は単純で賞賛すべき原則だが、もっと込み入った問題もある

Conditional Display

  • 条件分岐して出し分けるやつとか
  • 汎用の<IF>みたいなタグを使うのはくさい

    • 【補】Laravelでいうと@if - @endif
    • 避けられないこともあるが、できるだけ避ける
  • 回避方法1: helperに条件分岐ロジックを移す

    • helper戻り値にマークアップが含まれなければうまくいく
    • マークアップが含まれる場合は、次のことが犠牲になる

      • WYSIWIGエディタの恩恵にあずかること
      • プログラマとデザイナーとの分業
  • 回避方法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でも書ける

    • perlのCGI.pmとか
    • 関数コールでマークアップを構築する

      • 文字列結合操作をさける
    • 【補】こういうやつ
print $q->ul(
        $q->li('高機能アクセスカウンター'),
        $q->li('RevoCounter')
);

When to Use It

  • MVCのV
  • Template View vs. Transform View
  • Template Viewのメリデメ

    • メリ

      • ページ構造を見ながら作り込める
      • デザイナとプログラマとの分業

        • デザイナ: レイアウト
        • プログラマ: helperの実装
    • デメ

      • 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

    • 軽蔑する