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
- 避けられないこともあるが、できるだけ避ける
- 【補】Laravelでいうと
-
回避方法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
- 軽蔑する