国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
fastm設(shè)計(jì)思路深度剖析 java教程 - 一算子網(wǎng)博章

1php(&fastm)把文檔切割為簡(jiǎn)單的dom結(jié)構(gòu)

php模板的設(shè)計(jì)思路非常漂亮,用注釋里的begin和end把html(wml,或任何xml)頁面切割成不同的塊,而且塊里面還可以繼續(xù)切塊。

這樣一來,一個(gè)頁面被切割成一個(gè)樹結(jié)構(gòu),很象dom結(jié)構(gòu)。只是dom結(jié)構(gòu)太過笨重,對(duì)每一個(gè)元素都要建立一個(gè)節(jié)點(diǎn),而且節(jié)點(diǎn)的類型非常復(fù)雜。比如,一個(gè)html dom結(jié)構(gòu),有多少種html元素,就會(huì)有多少種節(jié)點(diǎn)類型,比如,body,table,tr,td,form,input等。

而php模板則是一個(gè)輕量級(jí)的dom結(jié)構(gòu),一個(gè)begin-end塊就是一個(gè)節(jié)點(diǎn)。begin-end塊只包括三種內(nèi)容——靜態(tài)文本,變量,和其它的begin-end塊。

設(shè)計(jì)思路如此簡(jiǎn)潔而強(qiáng)大,易用而通用(可以用在任何規(guī)范或不規(guī)范的xml頁面中,比如html,wml,甚至xul,xaml),而且,能夠在html編輯器中所見即所得??v觀天下模板技術(shù),莫出其右。

我經(jīng)過了多種java頁面技術(shù)的折磨,經(jīng)同事介紹,認(rèn)識(shí)了php模板技術(shù),欣喜異常,原來竟有這樣的好東西,只恨相識(shí)太晚。

fastm模板的思路完全借鑒php模板思路,只是稍微做了一些擴(kuò)展。(詳情請(qǐng)參見我的上一篇提到j(luò)dynamite的文章——java頁面技術(shù)綜述)。

fastm模板的begin-end dynamic塊,就相當(dāng)于php模板的begin-end塊。

fastm模板的begin-end ignored塊,就相當(dāng)于php模板的忽略不顯示的begin-end塊。

比如下面的html片斷。

<select name=”zipcode”>

            <!-- begin dynamic: zipcodes -->

            <option value=”{zipcode}”>{zipcode}</option>

            <!-- end dynamic: zipcodes -->

</select>

我們看到,這個(gè)片斷包含一個(gè)begin-end塊(zipcodes),這個(gè)塊里包含兩個(gè)相同的變量{state},其它的部分都是靜態(tài)文本。

 

這個(gè)片斷的fastm template dom結(jié)構(gòu)如下:

靜態(tài)文本  <select name=”zipcode”>

動(dòng)態(tài)塊zipcodes --

                             | --- 靜態(tài)文本  <option value=”

                             | --- 變量{zipcode}

                             | --- 靜態(tài)文本  ”>

                             | --- 變量{zipcode}

                             | ---靜態(tài)文本 </option>

靜態(tài)文本  </select>

 

2fastmvaluesetdom概念的又一次飛躍

fastm模板dom結(jié)構(gòu)的一個(gè)核心特性就是,只能讀取,不能改變。

 

php代碼每次裝載一塊php模板,然后動(dòng)態(tài)更換里面的變量部分的值。php模板從本質(zhì)上講是可以讀取,也是可以操作改變的。

html(wml,xml)dom更是如此。程序直接修改dom節(jié)點(diǎn)的值,才能得到不同的動(dòng)態(tài)結(jié)果??梢哉f,xml dom天生就是用來操作改變的。xml dom本身又是模板,又是數(shù)據(jù)。

 

可以改變的dom結(jié)構(gòu)不能夠用在多線程的環(huán)境下。每個(gè)線程必須獲取自己的新鮮dom備份,進(jìn)行操作改變,得到自己的動(dòng)態(tài)結(jié)果。想想看,在一個(gè)靜態(tài)文本占絕大部分的dom結(jié)構(gòu)里,這種做法將造成多么大的空間和時(shí)間上的浪費(fèi)。

 

fastm模板的dom結(jié)構(gòu)是只讀的,不能改變。所以一個(gè)fastm dom可以用在多線程的環(huán)境中。

既然我們不能改動(dòng)fastm template dom,那么我們?nèi)绾谓ofastm template dom賦值呢?我們?nèi)绾卫胒astm template dom獲得動(dòng)態(tài)結(jié)果呢?

fastm引入了valueset的概念。valueset是一個(gè)樹形結(jié)構(gòu)的動(dòng)態(tài)數(shù)據(jù)集,用來匹配只讀的fastm模板dom結(jié)構(gòu),生成動(dòng)態(tài)結(jié)果。

程序員必須事先構(gòu)造好整個(gè)樹形動(dòng)態(tài)數(shù)據(jù)集(valueset dom),然后把和valueset dom和fastm template dom結(jié)合起來,生成動(dòng)態(tài)結(jié)果。

 

所以,fastm的整個(gè)使用如下:

(1)程序的整個(gè)運(yùn)行過程中,fastm模板文件(也就是加了begin-end注釋的html文件)只需要被解析一次,生成一個(gè)fastm template dom。

(fastm模板解析速度奇快,比jsp編譯,velocity解析,xml dom解析,都快很多,大部分情況下甚至快于sax解析。而且fastm dom和原始fastm模板文件的大小幾乎一樣大,只多了一個(gè)list記錄不同的塊,空間效率也要高出)

(2)程序生成不同的valueset dom,匹配只讀的fastm dom,生成不同的動(dòng)態(tài)結(jié)果。

(由于fastm template dom結(jié)構(gòu)的簡(jiǎn)單高效,整個(gè)匹配過程很快。通常情況下,時(shí)間效率甚至高于最快的純jsp或servlet。valueset dom的空間效率比不上純jsp或servlet,但經(jīng)過合理重用,至少可以接近純jsp或servlet的空間效率。以后的高級(jí)應(yīng)用話題系列會(huì)詳細(xì)講解這個(gè)問題。)

 

比如,我們來為上面的template dom結(jié)構(gòu)(zipcode select)構(gòu)造一個(gè)valueset dom。

 

string[] zipcodes = {“361005”, “100008”};

 

ivalueset top = new valueset(); // 對(duì)應(yīng)上面的整個(gè)html片斷

list items = new arraylist(); // 對(duì)應(yīng) 動(dòng)態(tài)部分zipcodes

for(int i = 0; i < zipcodes.length; i++){

            ivalueset item = new valueset();

            item.setvariable(“{zipcode}”,  zipcodes[i]);

            items.add(item);

}

 

top.setdynamicvaluesets(“zipcodes”, items);

 

我們把top這個(gè)valueset dom和template dom結(jié)合起來。就生成如下結(jié)果。

 

<select name=”zipcode”>

            <option value=”361005”>361005</option>

            <option value=”10008”>100008</option>

</select>

 

我們可以看到,template dom節(jié)點(diǎn)和valueset dom節(jié)點(diǎn)之間不是一一對(duì)應(yīng)的關(guān)系,而是一對(duì)多的關(guān)系。一個(gè)template dom節(jié)點(diǎn)對(duì)應(yīng)一個(gè)valueset list。valueset list包含多少個(gè)valueset,這個(gè)template dom節(jié)點(diǎn)就顯示所少次。

 

比起taglib來,fastm的優(yōu)勢(shì)顯而易見。fastm的幾行代碼,或者一個(gè)方法,可以實(shí)現(xiàn)一個(gè)或幾個(gè)taglib的功能。比起任何其它的頁面技術(shù)來說,其它頁面技術(shù)能做到的,或者做的好的,fastm都能夠做得到,而且做的更好。而fastm能做到很多其它頁面技術(shù)做不到的事情。好了。不多說了。j

 

valueset dom和template dom的分開,是一個(gè)極大的思路上的創(chuàng)新和飛躍。

畢竟,頁面中的動(dòng)態(tài)部分,和靜態(tài)比起來,是非常小的一部分。valueset dom代表動(dòng)態(tài)部分,由程序隨時(shí)生成,可以存在多份。template dom代表靜態(tài)部分,只需要解析一次,而且只需要一份。

 

valueset dom和template dom的分開,更是一種前所未有徹底的顯示和數(shù)據(jù)的分離。比xml/xslt的方法更加徹底。xml確實(shí)是純粹的數(shù)據(jù),但xslt中卻不可避免的要包含邏輯。valueset dom是純粹的數(shù)據(jù),沒有任何邏輯,template dom是純粹的顯示模板,也沒有任何邏輯。

 

一份template dom可以用多個(gè)valueset dom賦值。同樣,一個(gè)valueset dom也可以用于多個(gè)template dom,把相同的數(shù)據(jù)顯示在不同風(fēng)格的模板中。

 

比如,我們還有這樣一個(gè)html片斷:

<table>

            <!-- begin dynamic: zipcodes -->

            <tr><td>{zipcode}</td></tr>

            <!-- end dynamic: zipcodes -->

</table>

 

我們把上面的top valueset賦給這個(gè)模板。得到的結(jié)果如下。

 

 

<table>

            <tr><td>361005</td></tr>

            <tr><td>100008</td></tr>

</table>

 

我們可以看到,template dom就是模板,只包含顯示風(fēng)格和分塊定義。valueset dom就是數(shù)據(jù),只包含數(shù)據(jù)。

 

fastm具有其它頁面生成技術(shù)不可比擬的優(yōu)越性:

所見即所得,模板與數(shù)據(jù)的徹底分離,模板與數(shù)據(jù)的多對(duì)多自由匹配,易學(xué)易用,開發(fā)速度快,運(yùn)行空間小,運(yùn)行速度快。

就我個(gè)人的感覺來說,fastm簡(jiǎn)直是解決一切頁面技術(shù)問題的銀彈。

 

上文可能有些“自賣自夸”之嫌,特解釋如下:

我不是一個(gè)善于吹噓的人。否則早就從事推銷員、公關(guān)宣傳之類有前途的職業(yè)去了。而且由于自我推銷能力和社會(huì)關(guān)系學(xué)能力的欠缺,已經(jīng)造成了自身的能力、精力和時(shí)間上的極大浪費(fèi)。我痛苦自己的現(xiàn)狀,卻不后悔。我了解社會(huì)的游戲規(guī)則,但沒有能力,也不愿、不屑參與。內(nèi)心里總是存在著一種癡心妄想,希望創(chuàng)造一個(gè)游離于現(xiàn)有規(guī)則之外的奇跡。

另外,我是一個(gè)客觀求實(shí)、頭腦嚴(yán)密清晰的人,具有“外舉不避仇,內(nèi)舉不避子”的負(fù)責(zé)的學(xué)術(shù)精神。有一分,當(dāng)說一分,決不多說一分,也絕不少說一分。

 

3fastm的可重用性的核心在于valueset dom

 

jsp技術(shù)的可重用性的核心在于taglib。

xml dom的可重用性的核心在于dom節(jié)點(diǎn)的通用操作。

 

fastm的可重用性的核心在于valueset dom節(jié)點(diǎn)的通用操作。比如,上面講的那段生成valueset的代碼。

template dom本身可以作為一個(gè)只讀模板來使用,同樣,template dom下面包含有的任何template dom結(jié)構(gòu)也可以作為一個(gè)獨(dú)立的只讀模板來使用。這點(diǎn)和xml dom一樣。xml dom的任何一個(gè)節(jié)點(diǎn)可以作為獨(dú)立的節(jié)點(diǎn)來使用。

 

valueset dom不僅是數(shù)據(jù)重用的核心,同樣是模板拼裝重用的中樞。fastm實(shí)現(xiàn)各模板之間各個(gè)塊的搬運(yùn)拼裝,再容易不過了。實(shí)現(xiàn)所謂的tile功能,小菜一碟。

 

jsp,還有某些表示邏輯的taglib,velocity模板,xsl文件,都是包含邏輯的模板。個(gè)人認(rèn)為,模板中包含邏輯,是一種很可笑的行為。模板的長(zhǎng)處在于表現(xiàn)頁面布局、顯示風(fēng)格,而不在于邏輯。為什么不讓擅長(zhǎng)邏輯的java去處理邏輯?

在fastm中,template dom和valueset dom中都不含有任何邏輯。所有的邏輯都落在java代碼中。而java是一種高度面向?qū)ο蟮恼Z言,其結(jié)構(gòu)性和重用性是任何模板語言不能比擬的。所以,fastm的可重用性的核心在于valueset dom節(jié)點(diǎn)的通用操作。這些通用操作的代碼當(dāng)然由java實(shí)現(xiàn)。

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
Vue 2.0學(xué)習(xí)筆記:Vue的render函數(shù)
Java Web開發(fā)構(gòu)想
解析Javascript事件冒泡機(jī)制
面試官:聊聊對(duì)Vue.js框架的理解
新興前端框架 Svelte 從入門到原理
JSP+XML構(gòu)架網(wǎng)站的實(shí)例
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服