引用 cyril Why Do We Need Templates? http://web.cyril.idv.tw/aps/ApsApsshowArticle.php?SystemId=1&CategoryId=1&Order=1 當我們使用Perl或是Python這類的語言來作Web Application時,有什麼更好的方式嗎?答案是有的,也就是所謂的Template.簡單的說,Template就是一個網頁的範本,上面有想要呈現的網頁風格.但是對於實際要呈現的資料,則由程式語言來動態決定,決定好之後將網頁範本與資料結合,就成了最後輸出的網頁.在Perl的世界中,有一個很流行的Module,就是CGI-FastTemplate.以此一Module來實現一開始的例子,我們需要兩個檔案,一個是網頁的Template檔案(helloworld2.tpl),另一個則是執行的程式(helloworld2.pl).檔案:helloworld2.tpl <html> <head> <title>Perl Demo2</title> </head> <body> <h1>Perl Hello World Demo2</h1> $STRING<br> </body> </html> 檔案:helloworld2.pl #!/usr/bin/perl -T -w use CGI::FastTemplate; my $tpl = new CGI::FastTemplate; $tpl->define(message=>'helloworld2.tpl'); $tpl->assign(STRING=>'hello world!'); $tpl->parse(MAIN=>'message'); print "Content-type:text/html \n\n"; $tpl->print(); 我將這種產生頁面的方式,稱之為On-line Template parsing,也就是每次讀取網頁就重新執行Template的置換動作,並將結果直接送給客戶端的程式(通常就是瀏覽器).除此之外,還有另外一種就是Off-line Template parsing.此一方式會先將Template的置換結果儲存下來,這樣後續的網頁讀取就可以直接利用先前已經儲存的結果,以增加網站的反應速度.雖說Template的設計方式,在執行速度上可能會比不用Template來的慢些,不過這種設計方式所獲得的好處,絕對遠大於這些速度的犧牲.而對於真正要求執行速度的系統,應該盡量以Off-line的方式來產生頁面.在這種情況下,使用Template所造成的速度減緩就不再是問題了. 當然了,Template不只是對非內嵌式的語言才有好處,對於像是PHP這類的內嵌式語言也有相當的好處.在程式設計中,一個很重要的觀念就是,要將data management,business logic,以及presentation分開.而Template的做法,正是將presentation跟business logic分離.這樣子的設計,可以讓一個複雜的系統變得更加容易實作,也更加容易維護以及修改.除此之外,這種設計還可以增加開發系統的速度.因為當你將business logic跟presentation分開之後,程式設計師就可以跟網頁設計師同時進行開發與修改的動作,而不至於互相影響而耽誤了對方的進度.當然了,從原始的HTML檔案變成Template檔案之間,還是會有雙方交集而影響的存在,不過這樣的方式已經將原先相互影響的時間減到最低了.所以即使是以PHP這種內嵌式的語言,還是建議使用Template的方式來架構網站.在這個簡單的例子裡,很難看出Template的好處,但是當你的網站規模越來越大,功能越來越多的時候,你會感謝有Template技術的存在. 可惜的是,這只是理想中的情況.在現實中,business logic跟presentation卻不是可以完全分離的.舉例來說,如果要動態產生一個不固定行數的表格,通常需要利用迴圈來達成這樣的效果.一種做法就是將表格的標籤經由程式裡的迴圈來產生,另一種做法就是在Template檔案裡利用特殊的標籤來達到迴圈的效果.而在後者中,Template的功能已經不只是單純的變數取代,而是包含了簡單的控制標籤.也因此又有了所謂的Template Language的出現.不管是哪一種做法,都說明了想要將business logic跟presentation完全分離,至少在Web Application上,目前還是沒有完美的解決方式.
|