[摘 要] 本文結合中小企業(yè)電子商務系統(tǒng)的特點,分析了J2EE平臺下開發(fā)模式的發(fā)展,介紹了一種在實踐中積累形成的業(yè)務構造平臺的初步設想和原型,分析了其特點、應用前景和待完善的地方。
[關鍵詞] 框架技術 軟件復用 電子商務系統(tǒng) MVC
一、概述
軟件的可重用性一直是軟件工程所追求的目標之一,軟件工程界希望有一天能和其他工業(yè)領域一樣,利用標準化的軟件模塊快速構建特定的應用系統(tǒng)。
這種情況下框架應運而生,面向對象系統(tǒng)獲得的最大的復用方式就是框架,一個大的應用系統(tǒng)往往可能由多層互相協(xié)作的框架組成。因此框架技術已經日益成為提高軟件生產效率的關鍵。
1.什么是應用框架
對于應用框架,一直以來沒有一個統(tǒng)一的定義,下面給出兩個最常用的定義:“框架是一個系統(tǒng)全部或者部分的可復用設計,通常由一組抽象類和類之間的協(xié)作組成”;“框架是一個能夠被開發(fā)人員實例化的系統(tǒng)骨架”。這兩個定義是相互補充的,前者從復用的角度描述了框架,而后者給出了框架的目的。根據以上兩個定義可知:(1)框架既分割了應用領域中的類、定義了各部分的主要責任和類與對象的協(xié)作關系,還規(guī)定了控制流程;(2)框架記錄并實現(xiàn)了其應用領域的主要公共設計決策。由此可以認為,框架是一個“部分實現(xiàn)”的軟件體系結構,是支持軟件設計復用1.2電子商務系統(tǒng)開發(fā)過程中框架技術應用的重要性
電子商務系統(tǒng)有著應用系統(tǒng)的共性,同時也有著自身的特點,相對來說流程和操作較為規(guī)范和簡單,完全可以總結出規(guī)范的流程,從而可以說為復用技術的應用創(chuàng)造了條件。
2.框架技術在系統(tǒng)開發(fā)中的重要作用
(1)知識積累。從代碼出發(fā)進行知識的積累是最佳的辦法??蚣芫褪沁@種思路的產出物。框架包含了大量的代碼,這些代碼是對某個特定問題領域中抽象概念及這些抽象概念之間關系的描述。
(2)資產的保護。知識積累本身就是一項對資產的保護工作。而另一項很重要的保護工作就是軟件組織(尤其是企業(yè))需要保證對知識的學習和改進是經過合法授權的。將知識積累為框架的形式有助于緩解這種情況。
(3)鼓勵重用。在軟件組織中形成以框架為核心的開發(fā)方式,在開發(fā)中使用框架,并在開發(fā)完成后改進框架。在這個反覆的過程中,重用的工作就已經開展起來了。
(4)優(yōu)化架構。框架代表了一種優(yōu)秀的軟件架構??蚣芏x了擴展方式,從而規(guī)范了框架的使用行為。這使得軟件能夠保持整體架構的穩(wěn)定性和一致性。
二、應用框架eCommerce Framework的設計實現(xiàn)
1.J2EE平臺下應用系統(tǒng)開發(fā)模式的進化過程
(1)JSPModel1
早期的JSP規(guī)范提出了兩種用JSP技術建立應用程序的方式。這兩種方式在術語中分別稱作JSP Model 1 和JSP Model 2,它們的本質區(qū)別在于處理批量請求的位置不同。在Model 1體系中,如圖1所示,JSP頁面獨自響應請求并將處理結果返回客戶。這里仍然存在表達與內容的分離,因為所有的數據存取都是由bean來完成的。盡管Model 1體系十分適合簡單應用的需要,它卻不能滿足復雜的大型應用程序的實現(xiàn)。不加選擇地隨意運用Model 1,會導致JSP頁內被嵌入大量的腳本片段或Java代碼,特別是當需要處理的請求量很大時,情況更為嚴重。
圖中文字:Request:請求;Response:響應;Application Server:應用服務器;
Enterprise Servers/Data Sources:企業(yè)服務器/數據源。
(2)JSPModel2
Model 2體系結構,如圖2所示,是一種把JSP與servlets聯(lián)合使用來實現(xiàn)動態(tài)內容服務的方法。它吸取了兩種技術各自的突出優(yōu)點,用JSP生成表達層的內容,讓servlets完成深層次的處理任務。
圖中文字:Controller、View、Model分別為MVC設計模式中的控制者、視圖、模型;
其他同圖1。
(3)MVC模式的杰出實現(xiàn)——Struts
MVC本身就是一個非常復雜的系統(tǒng),所以采用MVC實現(xiàn)Web應用時,最好選一個現(xiàn)成的MVC框架,在此之下進行開發(fā),從而取得事半功倍的效果?,F(xiàn)在有很多可供使用的MVC框架,由于Struts有完整的文檔并且相對來講比較簡單,所以用它開發(fā)MVC系統(tǒng)還是比較方便地。
作為一個MVC的框架,Struts對Model、View和Controller都提供了對應的實現(xiàn)組件,下面分別進行介紹,并且看看它們是如何結合在一起的。
Struts框架的處理流程清楚的體現(xiàn)了MVC系統(tǒng)的特點,簡單的Struts組件結構如圖3所示。Struts Controller ActionServlet處理客戶請求,利用配置的ActionMapping對象把請求映射到Action處理器對象進行處理。Action處理對象訪問ActionForm中的數據,處理和響應客戶請求,它還調用后臺的Bean組件,這些組件封裝了具體的業(yè)務邏輯。Action處理器對象根據處理結果通知Controller,Controller進行下一步的處理。
2.eCommerceFramework的設計
從上面的介紹不難看出struts在將問題分為幾個部分的同時也引入了復雜性。毫無疑問,要理解 Struts 必須接受一定的培訓,對開發(fā)者的要求較高。而且在實際開發(fā)中我們發(fā)現(xiàn)它的有些特性并不合適規(guī)模相對較小的電子商務系統(tǒng)的開發(fā),如taglib等。
這樣我們就希望根據需要開發(fā)適合自己的MVC框架實現(xiàn),這就是下面要重點介紹的eCommerceFramework。
(1)傳統(tǒng)MVC的弱點
MVC框架體現(xiàn)了一種“分治”的思想,他將業(yè)務邏輯、數據的訪問與界面表現(xiàn)進行了分離,為我們開發(fā)具有伸縮性、便于擴展、便于整個流程維護的系統(tǒng)提供了必要的條件。但是在項目實踐中不難發(fā)現(xiàn),即使使用了MVC,開發(fā)基于J2EE的系統(tǒng)仍然不是一件輕松的事情。過多的bean其實重復著大致相同的操作——存取數據;不同層間數據交換的格式沒有規(guī)范;布局相似的JSP頁面仍然重用性不高;框架沒有加進權限控制……等等,這些都制約了系統(tǒng)開發(fā)的效率和質量。
(2)持久化對象模型hibernate的啟示
幾乎所有的企業(yè)級應用都必定要涉及對象模型與數據庫之間的交互,因此持久層成為J2EE系統(tǒng)中最重要的部分之一。直接用JDBC或是DAO來實現(xiàn)會造成維護的”高消費”,對于大型系統(tǒng)簡直是一場噩夢。
作為一個純JAVA的O/R(對象/關系)映射框架,Hibernate很好的實現(xiàn)了對應用程序持久化的管理。其基本原理是用xml映射文件描述業(yè)務實體類映射數據庫的方式,然后通過hibernate api實現(xiàn)持久化操作。
(3)框架原型
對MVC及Hibernate的思想進行了整合與改進,我們提出了框架的原型。
從圖4中不難看出,整個系統(tǒng)完全遵循MVC設計模式的框架,系統(tǒng)各個模塊之間的耦合相對寬松,在系統(tǒng)開發(fā)期間,各部分開發(fā)人員之間不存在明顯的制約關系。實際上,我們只需要關心業(yè)務邏輯,對于數據庫的操作,數據格式的轉換等等頭疼的問題全由框架代勞了。下面的例子說明了使用eCommerceFramework后實現(xiàn)一個業(yè)務流程所要做的工作。
(4)框架的其他組件
①XML是關鍵。與HTML不同的是,XML語言能把數據與數據表示(例如界面)分開。這種特性能夠讓XML適合在網絡上不同計算環(huán)境(無論是不同的操作系統(tǒng)環(huán)境,還是不同的設備顯示方式)中采用一致的信息表示方式?;贘2EE的大多數框架都使用了XML及相關技術,如struts, velocity等等。
在框架中,XML可以說是框架的核心技術之一。無論在前臺頁面的展現(xiàn)、服務器的配置,還是遠程數據傳輸、數據的持久化都可以看到XML的應用。
②集成的權限控制??蚣茉谠O計之初就考慮了權限控制的接口(如圖5)?;具^程是這樣的,每一個頁面請求所對應的Action都惟一的與模塊(Module)和組(Datagroup)關聯(lián),當解析出請求的Action后,連接數據庫判斷當前用戶是否有模塊操作權限和數據權限。通過Check進行后續(xù)實體操作,反之則拒絕服務,將信息返回用戶。
三、結語
eCommerceFramework設計的初衷主要是為了使基于J2EE的項目產品化,縮短開發(fā)周期,提高系統(tǒng)質量。經過幾個項目的測試與檢驗,同等規(guī)模的系統(tǒng)開發(fā)較普通MVC模式節(jié)省了超過50%的代碼量,相應也就節(jié)省了50%的人月,并且測試中發(fā)現(xiàn)的bug數量僅為過去開發(fā)的系統(tǒng)的三分之一。當然有一個前提,項目初期的架構培訓工作一定要做好,要讓項目組中每一個人知道框架的意義和接口,包括分析設計人員和程序員。
但是可以看到框架在UI的設計和開發(fā)方面做的還不夠,對于類似頁面的巨大工作量和重復勞動還無能為力。這一點我們希望引入模型組件庫和邏輯頁面模板庫來解決。
目前的應用MIS系統(tǒng)都不可避免的有大量的統(tǒng)計和數據導入導出功能。對于統(tǒng)計結果的表現(xiàn)我們準備應用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].北京電子工業(yè)出版社,2004