[摘 要] 本文結合中小企業電子商務系統的特點,分析了J2EE平臺下開發模式的發展,介紹了一種在實踐中積累形成的業務構造平臺的初步設想和原型,分析了其特點、應用前景和待完善的地方。
[關鍵詞] 框架技術 軟件復用 電子商務系統 MVC
一、概述
軟件的可重用性一直是軟件工程所追求的目標之一,軟件工程界希望有一天能和其他工業領域一樣,利用標準化的軟件模塊快速構建特定的應用系統。
這種情況下框架應運而生,面向對象系統獲得的最大的復用方式就是框架,一個大的應用系統往往可能由多層互相協作的框架組成。因此框架技術已經日益成為提高軟件生產效率的關鍵。
1.什么是應用框架
對于應用框架,一直以來沒有一個統一的定義,下面給出兩個最常用的定義:“框架是一個系統全部或者部分的可復用設計,通常由一組抽象類和類之間的協作組成”;“框架是一個能夠被開發人員實例化的系統骨架”。這兩個定義是相互補充的,前者從復用的角度描述了框架,而后者給出了框架的目的。根據以上兩個定義可知:(1)框架既分割了應用領域中的類、定義了各部分的主要責任和類與對象的協作關系,還規定了控制流程;(2)框架記錄并實現了其應用領域的主要公共設計決策。由此可以認為,框架是一個“部分實現”的軟件體系結構,是支持軟件設計復用1.2電子商務系統開發過程中框架技術應用的重要性
電子商務系統有著應用系統的共性,同時也有著自身的特點,相對來說流程和操作較為規范和簡單,完全可以總結出規范的流程,從而可以說為復用技術的應用創造了條件。
2.框架技術在系統開發中的重要作用
(1)知識積累。從代碼出發進行知識的積累是最佳的辦法??蚣芫褪沁@種思路的產出物??蚣馨舜罅康拇a,這些代碼是對某個特定問題領域中抽象概念及這些抽象概念之間關系的描述。
(2)資產的保護。知識積累本身就是一項對資產的保護工作。而另一項很重要的保護工作就是軟件組織(尤其是企業)需要保證對知識的學習和改進是經過合法授權的。將知識積累為框架的形式有助于緩解這種情況。
(3)鼓勵重用。在軟件組織中形成以框架為核心的開發方式,在開發中使用框架,并在開發完成后改進框架。在這個反覆的過程中,重用的工作就已經開展起來了。
(4)優化架構。框架代表了一種優秀的軟件架構??蚣芏x了擴展方式,從而規范了框架的使用行為。這使得軟件能夠保持整體架構的穩定性和一致性。
二、應用框架eCommerce Framework的設計實現
1.J2EE平臺下應用系統開發模式的進化過程
(1)JSPModel1
早期的JSP規范提出了兩種用JSP技術建立應用程序的方式。這兩種方式在術語中分別稱作JSP Model 1 和JSP Model 2,它們的本質區別在于處理批量請求的位置不同。在Model 1體系中,如圖1所示,JSP頁面獨自響應請求并將處理結果返回客戶。這里仍然存在表達與內容的分離,因為所有的數據存取都是由bean來完成的。盡管Model 1體系十分適合簡單應用的需要,它卻不能滿足復雜的大型應用程序的實現。不加選擇地隨意運用Model 1,會導致JSP頁內被嵌入大量的腳本片段或Java代碼,特別是當需要處理的請求量很大時,情況更為嚴重。
圖中文字:Request:請求;Response:響應;Application Server:應用服務器;
Enterprise Servers/Data Sources:企業服務器/數據源。
(2)JSPModel2
Model 2體系結構,如圖2所示,是一種把JSP與servlets聯合使用來實現動態內容服務的方法。它吸取了兩種技術各自的突出優點,用JSP生成表達層的內容,讓servlets完成深層次的處理任務。
圖中文字:Controller、View、Model分別為MVC設計模式中的控制者、視圖、模型;
其他同圖1。
(3)MVC模式的杰出實現——Struts
MVC本身就是一個非常復雜的系統,所以采用MVC實現Web應用時,最好選一個現成的MVC框架,在此之下進行開發,從而取得事半功倍的效果。現在有很多可供使用的MVC框架,由于Struts有完整的文檔并且相對來講比較簡單,所以用它開發MVC系統還是比較方便地。
作為一個MVC的框架,Struts對Model、View和Controller都提供了對應的實現組件,下面分別進行介紹,并且看看它們是如何結合在一起的。
Struts框架的處理流程清楚的體現了MVC系統的特點,簡單的Struts組件結構如圖3所示。Struts Controller ActionServlet處理客戶請求,利用配置的ActionMapping對象把請求映射到Action處理器對象進行處理。Action處理對象訪問ActionForm中的數據,處理和響應客戶請求,它還調用后臺的Bean組件,這些組件封裝了具體的業務邏輯。Action處理器對象根據處理結果通知Controller,Controller進行下一步的處理。
2.eCommerceFramework的設計
從上面的介紹不難看出struts在將問題分為幾個部分的同時也引入了復雜性。毫無疑問,要理解 Struts 必須接受一定的培訓,對開發者的要求較高。而且在實際開發中我們發現它的有些特性并不合適規模相對較小的電子商務系統的開發,如taglib等。
這樣我們就希望根據需要開發適合自己的MVC框架實現,這就是下面要重點介紹的eCommerceFramework。
(1)傳統MVC的弱點
MVC框架體現了一種“分治”的思想,他將業務邏輯、數據的訪問與界面表現進行了分離,為我們開發具有伸縮性、便于擴展、便于整個流程維護的系統提供了必要的條件。但是在項目實踐中不難發現,即使使用了MVC,開發基于J2EE的系統仍然不是一件輕松的事情。過多的bean其實重復著大致相同的操作——存取數據;不同層間數據交換的格式沒有規范;布局相似的JSP頁面仍然重用性不高;框架沒有加進權限控制……等等,這些都制約了系統開發的效率和質量。
(2)持久化對象模型hibernate的啟示
幾乎所有的企業級應用都必定要涉及對象模型與數據庫之間的交互,因此持久層成為J2EE系統中最重要的部分之一。直接用JDBC或是DAO來實現會造成維護的”高消費”,對于大型系統簡直是一場噩夢。
作為一個純JAVA的O/R(對象/關系)映射框架,Hibernate很好的實現了對應用程序持久化的管理。其基本原理是用xml映射文件描述業務實體類映射數據庫的方式,然后通過hibernate api實現持久化操作。
(3)框架原型
對MVC及Hibernate的思想進行了整合與改進,我們提出了框架的原型。
從圖4中不難看出,整個系統完全遵循MVC設計模式的框架,系統各個模塊之間的耦合相對寬松,在系統開發期間,各部分開發人員之間不存在明顯的制約關系。實際上,我們只需要關心業務邏輯,對于數據庫的操作,數據格式的轉換等等頭疼的問題全由框架代勞了。下面的例子說明了使用eCommerceFramework后實現一個業務流程所要做的工作。
(4)框架的其他組件
①XML是關鍵。與HTML不同的是,XML語言能把數據與數據表示(例如界面)分開。這種特性能夠讓XML適合在網絡上不同計算環境(無論是不同的操作系統環境,還是不同的設備顯示方式)中采用一致的信息表示方式?;贘2EE的大多數框架都使用了XML及相關技術,如struts, velocity等等。
在框架中,XML可以說是框架的核心技術之一。無論在前臺頁面的展現、服務器的配置,還是遠程數據傳輸、數據的持久化都可以看到XML的應用。
②集成的權限控制。框架在設計之初就考慮了權限控制的接口(如圖5)?;具^程是這樣的,每一個頁面請求所對應的Action都惟一的與模塊(Module)和組(Datagroup)關聯,當解析出請求的Action后,連接數據庫判斷當前用戶是否有模塊操作權限和數據權限。通過Check進行后續實體操作,反之則拒絕服務,將信息返回用戶。
三、結語
eCommerceFramework設計的初衷主要是為了使基于J2EE的項目產品化,縮短開發周期,提高系統質量。經過幾個項目的測試與檢驗,同等規模的系統開發較普通MVC模式節省了超過50%的代碼量,相應也就節省了50%的人月,并且測試中發現的bug數量僅為過去開發的系統的三分之一。當然有一個前提,項目初期的架構培訓工作一定要做好,要讓項目組中每一個人知道框架的意義和接口,包括分析設計人員和程序員。
但是可以看到框架在UI的設計和開發方面做的還不夠,對于類似頁面的巨大工作量和重復勞動還無能為力。這一點我們希望引入模型組件庫和邏輯頁面模板庫來解決。
目前的應用MIS系統都不可避免的有大量的統計和數據導入導出功能。對于統計結果的表現我們準備應用VML語言,并逐步形成自己的一套組件;數據轉換采用常用的EXECL格式,基本能夠滿足大部分應用的要求。
參考文獻:
[1]Sun Microsystem Inc.Java: 2 Platform Enterprise Edition Specfication v1.4,http://java.sun.com/j2ee
[2]Mark Eagle:Object to Relational Mapping and Relationships with Hibernate
[3]Chi-Hsing Chu Chien-Hsuan Huang Michael Lee:Building a XML-based unified interface system under J2EE architecture
[4]Gorel HedinJorgen Lindskov Knudsen:Language Support for Application Design, Wiley 1999
[5]Jiewei Lin:3D Web Graphics without Plugins using VML, CS297 Report
[6]David S.Frankel著/鮑志云譯:《應用MDA》
[7] Johnson RE. Frameworks = (Components + Patterns). Communications of the ACM, 1997
[8]Rumbaugh J, Jacobon I, Booch G. The UML Reference Manual. New York: Addison-Wesley, 1999
[9]JamesTurner, Kevin Bedell. Struts Kick Start[M].北京電子工業出版社,2004