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