1前言
在企業級的應用系統開發領域,J2EE架構現在已經被普遍接受了。雖然它並未完全兌現剛剛出現時的種種美好確保,跨平台,分布式,易於開發維護等等,但J2EE的廣泛普及,已經是一個不爭的事實。
雖然J2EE已經非常普及,但從技術上來講,它本身還是存在很多缺陷的,比較突出的缺點,就是開發效率低,維護更加複雜,許多項目組都陷入其中不可自拔。本文將就造成這一現象的原因進行初步探討,並在此基礎上提出自己的解決思路。
本文討論的範圍僅限於採用B/S開發企業的應用系統,不涉及網站類型的應用開發。討論的技術方向,主要針對J2EE,其餘技術方向不作為重點討論,僅供參考。
本文先從Web開發的現狀困境開始,分析造成目前困境的原因,然後通過回顧B/S技術架構的演化,以及對比C/S和B/S的開發模式的差異,提出一套新的開發解決思路,最後介紹WebDW系列產品的設計目的和簡易功能,再以此為基礎來進行擴充討論。
2 Web開發的困境2.1概述
說明:Web應用系統的開發,像一座大山一樣,把所有的人都壓垮了。
自互連網出現以來,公司專屬應用程式系統的架構發生了很大的變化,C/S架構被廢棄,B/S成為絕對的主流。但B/S架構本身,要比C/S複雜的多,加上新技術層出不窮,整個行業都處於巨大的困境之中。Web應用系統的開發,就像一座大山一樣,把所有的人,無論是甲方還是乙方,無論是開發人員,維護人員還是系統使用者,都被累垮了。
2.2Web系統開發的複雜性
B/S系統本身的架構設計,要比C/S系統複雜很多,在C/S架構中,一般是兩層結構。如下圖。
一般在這種架構中,伺服器是一個資料庫伺服器,只負責資料的儲存和讀取存取支援;前景程式採用 VB,PB,Delphi 等圖形開發工具來開發,通過網路直接連接到背景資料庫伺服器,通過發送SQL 命令來實現資料庫的訪問。這種開發環境下可以使用圖形化的控制項來搭建使用者介面,使用者的互動性比較好。缺點在於應用程式發布在用戶端,如果客戶機數量很多的話,客戶機程式的安裝,升級都比較困難。
而在B/S結構中,涉及到了多種伺服器類型,Web伺服器,App伺服器,DB伺服器。如下圖。
在B/S系統中,使用者通過客戶機上的瀏覽器來訪問背景Web伺服器,Web伺服器再把相應的請求轉寄給應用伺服器來處理,應用伺服器再將其中的資料訪問請求轉寄給資料庫伺服器進行處理。
在C/S系統中,應用系統或者應用程式本身是一個完整的,獨立的整體,一般採用一種開發語言來開發即可,這種開發語言不僅負責使用者介面,也負責商務邏輯控制,以及資料訪問請求的產生發送,主要的開發和執行工作是在客戶機上完成的。
而在B/S系統中,整個系統的架構要複雜的多。首先,客戶機上只有一個通用的瀏覽器,使用者操作介面是通過Web伺服器返回的HTML語言來進行描述的,如果需要一些動態特徵,則不得不通過在HTML頁面中嵌入JavaScript來實現。在應用系統中,大量的頁面是動態,而非靜態頁面,因此必須在應用伺服器上完成動態網頁面到靜態HTML的轉換工作。如果動態網頁面中包含資料訪問請求,則又必須訪問背景資料庫伺服器來協助完成此項工作。
以J2EE標準流程為例,當使用者在瀏覽器上輸入一個地址,或者URL以後,這個URL首先傳遞給Web伺服器,然後再轉寄給App伺服器來解釋執行。
假如請求是一個jsp頁面,應用伺服器首先讀取這個檔案,然後把它翻譯成一個java檔案,再編譯成一個class檔案,再解釋執行這個class檔案,如果需要再訪問後台資料庫,最後產生一個HTML格式的輸出檔案流,返回給Web伺服器,再返回給客戶機瀏覽器解釋成一個介面。
與C/S開發的一種語言套件打天下不同,B/S系統的開發需要在多個層次上進行編程開發:瀏覽器中,用HTML和JavaScript編程;應用伺服器上,用Java或者.net之類編程,資料庫伺服器上用SQL語句編程。
在C/S開發中,最終的產品是一個Exe檔案;而B/S開發中,最終的產品是一個網站,裡麵包含成千上萬個檔案,而且是各種不同類型的檔案:HTML,圖片,JSP, Java, Class, XML等等。
在Web開發中,人們為了簡化開發過程,提高效率,陸續發明了很多新技術,在頁面開發上,基於JavaScript本身,發明了如prototype, jQuery, Ajax等架構;基於java技術,發明了J2EE架構,基於J2EE架構,又發明了Struts, WebWork, Spring, Hibernate ,Itabtis等無數的架構產品。結果在試圖解決問題的同時,這些產品本身又造成了新的問題。
相對於C/S開發的單一開發工具開發,B/S開發要涉及到很多工具,語言和架構,這些工具,語言和架構,都是為瞭解決某一問題而設計的,而開發人員必須把這些目的不同的東西整合起來,才能搭建出一個整體的系統。
B/S的複雜度,很大程度上是由於涉及的技術面太多,太多的產品,太多的技術,太多的架構,這樣不僅增加了學習的難度,增加了學習技術的成本,而且也增加了系統運行維護的成本,最終提高了整個系統的開發,運營成本。
這種高昂的成本讓開發人員,維護人員,開發公司,和甲方都陷入了困境之中,大家在這一困境中掙紮,不能自拔。