テンプレートの継承とプロトタイプ

2006年05月09日(火) 13:41

djangoラブなので、最近はテンプレートの継承ができないとストレスがたまって仕方ありません。
phpのframeworkでrhacoというのがあるのですが、私がいろいろ五月蠅く言うので、継承に似た仕組みが用意されています。

この似た仕組みというのが結構面白いです。
djangoは継承なのですが、rhacoの作者はdjangoをよく知らないので(知っていてもそうしたかもしれませんが)継承というよりはプロトタイプ的なものになっています。
継承もプロトタイプも甲乙つけがたく、是非両方を味わってみて欲しい所です。

以下、図で説明します。

djangoの場合はテンプレートの継承


「い」というベースになるテンプレートにブロックと呼ばれるマーカーで切り替わる部分を指定します(A/B/C)。
ベースのテンプレート「い」と違う部分を表現したい時には「ろ」のようにブロックを定義したテンプレートで親テンプレートに「い」を指定します(実際はテンプレートに継承のタグを記述します)。
「ろ」をレンダリングすると「は」ができあがります。
「は」と少し違う表現をしたい時には「に」テンプレートで親テンプレートに「ろ」を指定します。継承のカスケードです。できあがりは「へ」になります。

rhacoの場合はテンプレートに対してブロックを重ねる


「い」というベースのテンプレートにブロックと呼ばれるマーカーで切り替わる部分を指定します(A/B/C)。
ベースのテンプレート「い」と違う部分を表現したいときには「ろ」のようにブロックを定義したテンプレートをブロック追加します(実際はロジックでテンプレートのレンダリングをする前にaddBlockTemplateというメソッドでブロックテンプレートを挿入します)。
「ろ」をブロック追加した後に「い」のテンプレートをレンダリングすると「は」ができあがります。
「は」と少し違う表現をしたいときには「い」に対して「ろ」と「に」をブロック追加します。ブロックの動的付け替えです。できあがりは「へ」になります。


方法は違いますが、テンプレートの記述量や全体のイメージの変更のしやすさはほぼ同等です。
jeff croftのように(djangoのように?)基本的にはコードを書かない(actionを書かない)場合には継承の力が、コードを書く他のフレームワークではプロトタイプの馴染みやすさが、受けるのかもしれません。

phpを使わざるを得ないときは、rhacoがいいです。あ、「ほ」が無いことに何の意味もありません。


 
ponybadge

Powered by

Feedbacks

Tweets

Tags

Calendar