tag在國(guó)內(nèi)java社區(qū)并不算流行,這在很大程度上是因?yàn)閖sp
tag的設(shè)計(jì)失誤造成的。但在整個(gè)開發(fā)業(yè)界內(nèi),tag已經(jīng)成為一種廣泛應(yīng)用的技術(shù)。微軟的dotNet服務(wù)器端極端依賴tag技術(shù),而在瀏覽器端IE的
behaviour, htc也獨(dú)立的發(fā)展起來(lái)。Longhorn的XAML,
Firefox的XUL無(wú)一例外的依賴于可自定義的tag。java社區(qū)的JSF, SiteMesh, Tiles
等等,不可盡數(shù)。有些人在前臺(tái)通過給html原有元素增加自定義屬性,然后通過javascript去解釋的做法,也是一種element
enhance概念的變種。至于FreeMarker這種模板語(yǔ)言,明明類似于tag技術(shù),偏偏不采用xml語(yǔ)法,簡(jiǎn)直是自找麻煩。
這里最關(guān)鍵的地方就是自定義tag可以實(shí)現(xiàn)抽象層次的提升,是一種類似于函數(shù)封裝的機(jī)制,從而實(shí)現(xiàn)概念的分離和明確化。基于tag可以實(shí)現(xiàn)頁(yè)面元素的組件
化,加上xml語(yǔ)法的可理解性,表達(dá)能力以及無(wú)與倫比的集成能力,使得tag技術(shù)可以超越VB等組件開發(fā)環(huán)境(想想集成別人的組件代碼難還是集成別人的
xml描述文件難)。自定義tag提供的抽象能力不僅僅是面向?qū)ο蟮?,而且是類似AOP的,這些都極大的輔助了我們的思考和設(shè)計(jì)。
cocoon使用管道技術(shù)也構(gòu)造了某種tag機(jī)制,但是它的效率很成問題。從數(shù)學(xué)上說多個(gè)處理函數(shù) g, h, k可以通過函數(shù)組合(composition)構(gòu)成新的函數(shù)f
f(data) = g * h * k(data)
這是所謂函數(shù)式語(yǔ)言強(qiáng)大能力的源泉。cocoon處理的時(shí)候從k(data)開始,處理完畢之后調(diào)用h, 即函數(shù)是從右向左結(jié)合的。如果我們保證處理函數(shù)滿足左結(jié)合律,則g*h*k就可以預(yù)編譯為f, 從而解決性能問題,這正是witrix平臺(tái)中tpl技術(shù)所采用的方案。