Logic-less templateに関する覚書
(This entry is a summary of the conversation to @confound and @miyagawa and the paper of ESMVSTE)
@confound氏に「Xslateでpush-style template syntaxをサポートしてはどうか」といわれたので、彼やmiyagawaさんからアドバイスをもらいつつ考えたことのまとめ。ESMVSTE(Enforcing Strict ModelView Separation in Template Engines)の内容もまじってます。
- HTML::Templateやmustacheのようなlogic-less templateをpush-style template*1という。これは、必要な計算(logic)をすべて終えたあとにテンプレートにデータを「押しこむ」ことによる。
- 逆に、TTやKolonはpull-style templateという。これは、テンプレート内で、モデルからデータを「引いてくる」ことから。
- push-styleのほうがMVCのモデルとビューの分離が明確なのでよい
- 分離のメリットは以下の通り*2
- カプセル化(encapsulation): ビジネスロジックをモデルにカプセル化する
- 明確(clarity) - テンプレートがHTMLそのものになるので読みやすい
- 役割分担(division of labor): デザイナーと協働しやすい
- コンポーネントの再利用(component reuse): 大きなメソッドを分割するように、テンプレートをナビゲーションや検索窓などに分割することで再利用を促進できる
- 変更箇所を一箇所に(single-point-of-change): テンプレートを適切に分割することで、変更箇所を最小にできる
- メンテナンス(maintenance): テンプレートの修正はプログラムの修正より安全であり、プロセスの再起動も不要である
- ビューの交換(interchangeable views): サイトの外観を簡単に交換できる
- 安全性(security): ユーザーがカスタマイズ可能なblogなどでは制限のないテンプレートは危険である
Xslateはeval()等の危険なことはしていない*3ので、運用次第では上記のビューの分離のメリットはすべて享受することができます。ただ「運用次第では」というところが微妙なので、ひとつくらいはpush-style templateをサポートしてもいいでしょう。