Monday, June 13, 2005

減少jsp文件目錄的維護成本,需要一種什?樣的JSP發布框架?

即使對于一個大部分基本邏輯都包裝在標簽/類/servlet/EJB中的網站,以至于在jsp中看不到任何的javalet代碼,隨著規模的擴大 和項目時間的延長,目錄中總是堆滿了越來越多的垃圾文件。有些文件本身不是垃圾,而是被包容的子文件,但是jsp服務器可不管這個,如果不是jsp後綴, 它就會被jsp把源代碼下載到客戶端;或者,同樣是jsp一樣時就讓維護者頭大。如果不是采用良好的文件策略,那?隨著規模的擴大,一般的中大型站點堆出 幾千上萬的jsp文件,其中每一個模塊分上幾十個,是非常正常的;這時侯,管理這些文件就成?一件艱苦的工作;事實上,如果不是多人分管的話,一個發布管 理員真正能夠維護的文件如果超出一百個,效率就會急劇降低。何況,還有更重要的sql文件,class文件,xml設置文件……。?什?總是努力使用 bean/fragments/標簽/ORclass(如EJB),這就是原因之一。事實上,從事過大型項目的開發員對于後期目錄中那種不知那個有用那個 無用但卻要?不管要?只能一個個識別的經曆,總是一種難言的痛苦。經曆過這種痛苦也會對可重用組件在項目中實際上降低了後期維護費用的感受良深。
要實現高度的重用性,減少需要維護的文件的數量,就需要對系統架構甚至前台框架都進行抽象,重用的方式除了Class等方式外,還可以使用 shellscript幫助,特別是對那種必須分割出目錄管理而實際上結構非常相似的類型。通過這個辦法,即使是很大的項目,也可以把需要維護的jsp文件,不含java類庫壓縮到一百個以下,包括用于包含的小jsp片片fragments。
良好的命名規則可以進一步提高對文件的識別,也便于使用shellscript按文件類型進行管理。?了防止被jsp服務器下載到客戶端,如果是與 apache結合的話,可以在apache中建立禁止下載的文件類型。我一般是把這種文件命名?jsp_,?了達到這種命名的規範性,甚至不惜把已經寫好 的程序改一遍,幸好,在良好的組織框架下,文件總是只有幾十個,並且只需要改一兩行的幾個字母。盡管如此,每次都仍是讓我感到生畏,這種規範工作的確是最 不令人興奮的。
建立良好的命名規則和目錄結構,也是?了可以有效重用已有工作的前提,但什?時侯應該達到重用呢?畢竟即使是很相似的框架類型,在面向重用要求時,就意味 著很多的if-else。logic:equal/present之類,在Class中可以通過接口和繼承實現代碼的高效率,而在JSP中,如果重用變型 達到三個以上,大量的if-else之類就令混帳代碼冗余廣泛伸延,而在jsp文件內部令維護難道大大增加一個檔次;或者一個簡單的要求就需要 include十次八次,同樣是加大了維護成本。(要知道,接手者,甚至是自已吧,過了幾個月,對于開發中的印象早就消失幹淨了。)
這是一個難以協調的問題,可以調整的空間很小:如果不重用而一個文件任務專用,意味著每次需求變動時要重複維護多個非常相近的文件;超過三個的話,也就等 于說這個文件建立方式是低效的。而如果文件複用的話,依靠在jsp中的判斷實現,那?文件變得難以維護調試的界限也是三個左右。希望把這種代碼包含進 Bean是愚蠢的選擇,Bean不是做這些事情的,原則上,非表達層只應該包含業務邏輯,不應帶有任何專用的表達層代碼,象html。
問題的焦點在于,JSP作?表達層的實現方式,本身缺乏對象抽象的能力,只能依靠在jsp中的邏輯判斷適應條件變化;而理想的MVC,view視圖需要的 是一個定義視圖表達形式的對象,jsp根據這個對象的設置生成框架需要的html代碼,甚至生成jsp本身。因此,實際上對于這種大型的站點來說,在數據 庫以及數據映射和業務邏輯的中間層以上,表達層以下,需要的是一個jsp的發布系統。這個發布系統根據用戶自已定義和開發的框架抽象,生成jsp目錄/文 件等。它到底應該如何運行,我還沒有明確的解決方案,不過這個系統會有用的。
Cocoon是另一種發布系統,不過不符合這個要求,他事實上是一個與目錄無關的xml轉換器,可以根據用戶定義的xslt轉換器以及客戶請求的文件類 型,通過不同的轉換器向用戶提供同一內容的不同文件類型,xml,html,pdf或者其他。事實上,由于在互聯網上存在著文件類型統一化和歸一化的自然 趨勢,因此,?了少量用戶的特殊文件類型要求讓系統增加一半成本,減慢一半以上的速度,只能處理少一半的文件,加了這?一個轉換層是否值得我是深表懷疑。 象特定類型的數據必須提供xml,(如SOAP),直接用servlet寫的應答程序就可以看作是一個全功能的轉換器,又何必另外再搞一個轉換器和控制器 來處理這種要求呢?除非所有文件都必須同時提供 xml/html/pdf,否則象cocoon這種框架,我相信是毫無意義的。
http://blog.csdn.net/zwwwxy/archive/2005/04/26/364322.aspx

http://zwwwxy.blogchina.com/1340936.html
http://javaxml.blog-city.com/jspjsp.htm

0 Comments:

Post a Comment

<< Home