Posted on 2006-02-22 20:39
canonical 閱讀(1854)
評論(1) 編輯 收藏 所屬分類:
設計理論
web開發這個領域是很有意思的。首先,web的興起是在軟件業發展到一定階段才發生的,它必然吸收了軟件業最優良的思想,必然有其本質上先進的地方。另
一方面,web的應用畢竟是時日較短的事情,造成很多基礎架構方面也是薄弱的,原始的。
具體來說,前臺html的展現模型本身是非常先進的。xhtml+css+js實現了結構(structure),
表現(presentation)和行為(behavior)的分離。xhtml本身是簡單的文本文件,通過工具的支持可以做到結構上的"所見即所得"
(WYSIWYG)。
在js中操縱html結構具有多種方式:可以通過id直接訪問html片斷,可以直接操縱dom的層次結構,可以將html作為線性文本處理,可以應用
xml相關的技術對dom結構進行變換,可以動態切換html元素的css風格等。dom結構的訪問方式是高度統一的,通過parentNode,
childNodes, setAttribute, getAttribute等少數幾個
API函數,我們可以通過一種簡潔一致的方式操縱所有的節點和相關屬性(當然,IE這方面的bug不少)。html相關技術中所顯示的結構控制能力遠遠超
越了傳統桌面程序中組件技術所能達到的程度。
但另一方面,html也是原始的,缺乏現代應用程序所必需的標準控件,典型的如Tree控件和Tab控件等。每個開發商都不得不實現并維護自己的界面庫。
通過web界面調用后臺業務邏輯的方式更是很粗糙的。基礎的servlet只提供了基于IO的有限狀態機模型,對于后臺功能缺乏有效的組織,而對于前臺界
面也缺乏合適的抽象手段,僅僅作為文本輸出。MVC框架建筑在servlet模型之上,將后臺邏輯功能以一種統一的組織方式向外暴露。而tag技術在前臺
界面中的應用,使得我們可以有效的識別并分離出我們所關心的結構。這些技術的發展都是web開發模型逐漸精細化的必然結果。
為了在服務器端獲得足夠強的結構控制能力,有些人求助于桌面程序的歷史開發經驗,希望通過java語言中的結構表達能力來擴展web開發的模型,于是便有
了echo2,
tapestry這樣的組件化web開發框架。坦率的說,我并不看好這類強類型建模的框架。除了性能上的原因之外,我反對這類框架的一個主要原因是
java語言直接表達的結構一般無法達到用xml文本表達的結構的統一性和靈活性,從而很難應對界面的快速變化。實際上,對web界面進行組件化的分解并
不一定需要一種強類型語言支持的組件模型。通過自定義標簽的使用,我們完全可以實現將頁面分解為多個子部分的目的,這一點已經由witrix平臺中的
tpl模板技術所證實。
web開發是個既先進又落后的領域。很多人面對這種矛盾的情況,難免思想上會出現混亂。關鍵是要認清技術的本質而不要被OO是否必需等抽象的討論所迷惑。