【しばらく編集不可モードで運営します】 編集(管理者用) | 差分 | 新規作成 | 一覧 | RSS | FrontPage | 検索 | 更新履歴

「ロジックとプレゼンテーションの分離」というけれど - コンストラクトという概念

目次

コンストラクトという概念

HTMLの生成に関する限り、もう1ステップ存在するのではないでしょうか。

ロジック
入力データを受けて出力データを算出すること
コンストラクト
算出された出力データ群を定められた順序や構造に整えること
プレゼンテーション
情報の見栄えを整えること

ロジックはサーバーサイドプログラムが、意味構造はテンプレートが、プレゼンテーションはスタイルシートが担当します。

ここでテンプレートといっているものは、HTML::Templateのような“置換用の雛型ファイル”だけを意味するわけではありません。適切なHTMLを得られればいいので、print の羅列でも、グローバル変数でも、タグを返すサブルーチンのネストでも外部の置換用ファイルでも、規模や性質に応じて適切に選択していいと思います。

テンプレートの例

HTMLテンプレート

 #sample.pl
 my $t = new HTML::Template(filename => 'sample.tmpl');
 $t->param(title => 'title');
 $t->output();
 
 <!-- sample.tmpl -->
 <html><head><title><tmpl_var name="title"></title>
 <link rel="stylesheet" href="hoge.css">
 </head><body>
 <h1><tmpl_var name="title"></h1>

print の羅列

 print qq(<html><head><title>$title</title>);
 print qq(<link rel="stylesheet" href="hoge.css">);
 print qq(</head><body>);
 print qq(<h1>$title</h1>);
   :
   :

グローバル変数

 $html = <<END
 <html><head><title>$title</title>
 <link rel="stylesheet" href="hoge.css">
 </head><body>
 <h1>$title</h1>
   :
   :
 END

タグを返すサブルーチンのネスト

 print start_html(-title=>$title,
                  -style=>{'src'=>'hoge.css'}),
       h1($title),
       :
       :

個人的には、関数として扱える“サブルーチンのネスト”が一番やりやすいですね。

(Too many spams ... embedded comments are not allowed now, sorry.)