2011-02-04
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をサポートしてもいいでしょう。
*1:または「push strategyを採用したテンプレート」でもいい。
*2:ESMVSTEより。これらはテンプレート一般の話でpush/pullに限らない?
*3:PPバージョンではevalしますが。
任天堂
購入: 6人 クリック: 63回
購入: 6人 クリック: 63回
トラックバック - http://d.hatena.ne.jp/gfx/20110204/1296805003
リンク元
- 14 http://reader.livedoor.com/reader/
- 6 http://www.google.com/reader/view/user/-/state/com.google/reading-list
- 6 https://www.google.co.jp/
- 5 http://b.hatena.ne.jp/t/perl?sort=eid
- 4 http://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&source=web&cd=12&ved=0CDoQFjABOAo&url=http://d.hatena.ne.jp/gfx/20110204/1296805003&ei=wRxmT-CzAa3LmAXqoqiNCA&usg=AFQjCNHXkmhDdz5pTqdn3_RoDxk4x2-jig&sig2=4CTybyK3c_uNjCXamm2XUQ
- 4 http://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&source=web&cd=3&ved=0CEcQFjAC&url=http://d.hatena.ne.jp/gfx/20110204/1296805003&ctbs=lr:lang_1ja&ei=BSRnT6ubIu7OmAXZ8ISgCA&usg=AFQjCNHXkmhDdz5pTqdn3_RoDxk4x2-jig&sig2=CHjr0TmVzx-5fU1h5l5tqw
- 3 http://192.168.11.6/feeds/list/content
- 3 http://driver-driver-driver.com
- 3 http://ironman.enlightenedperl.org/
- 3 http://www.google.co.jp/search?sourceid=chrome&ie=UTF-8&q=logic+less+template


