3 系統構架與分層設計
3.1 總體技術構架
軟件系統的構架猶如建筑設計構架一樣,是科學與藝術的結合,更是實際經驗的不斷總結。構架的優劣從根本上決定了軟件產品的穩定性、擴展性、柔韌性、有效性,所以軟件系統的總體技術構架就如骨架是支持任何系統的基礎。
構架(Architecture,原意為建筑學設計藝術與科學)在RUP中的定義:軟件系統的構架(在某一給定點)是指系統重要構件的組織或結構,這些重要構件通過接口與不斷減小的構件與接口所組成的構件進行交互;構架是系統在其所處環境中的最高層次的概念。軟件系統的構架是通過接口交互的重要構件(在特定時間點)的組織或結構,這些構件又由一些更小的構件和接口組成。構架的描述方式:“4+1”視圖(用例視圖、設計視圖、實現視圖、過程視圖、配置視圖)是一個被廣為使用的構架描述的模型。
層(layer):對模型中同一抽象層次上的包進行分組的一種特定方式。通過分層,從邏輯上將子系統劃分成許多集合,而層間關系的形成要遵循一定的規則。通過分層,可以限制子系統間的依賴關系,使系統以更松散的方式耦合,從而更易于維護。系統分層的幾種常用方法:
1) 常用三層服務:用戶層、業務邏輯層、數據層;
2) 多層結構的技術組成模型:表現層、中間層、數據層;
3) RUP典型分層方法:應用層、專業業務層、中間件層、系統軟件層;
4) 基于J2EE的B/S模式:表現View層、業務邏輯層、服務接口層、數據持久層。
結構:軟件構架是多種結構的體現,結構是系統構架從不同角度觀察所產生的視圖。就像建筑物的結構會隨著觀察動機和出發點的不同而有多種含義一樣,軟件構架也表現為多種結構。常見的軟件結構有:模塊結構、邏輯或概念結構、進程或協調結構、物理結構、使用結構、調用結構、數據流、控制流、類結構等等。
以下就SOA(面向服務的構架)技術、基于J2EE分層的表現層框架、業務邏輯層框架、數據持久層框架技術分別予以簡要分析和說明,然后給出本系統基于SOA面向服務的構架和多層體系結構。
SOA(英文Service-Oriented Architecture),即面向服務架構的縮寫。簡單來說,SOA就是一種進行系統開發的新的體系架構,在基于SOA架構的系統中,具體應用程序的功能是由一些松耦合并且具有統一接口定義方式的組件(也就是service)組合構建起來的。本質上說,SOA體現的是一種新的系統架構,新的構架理念。SOA一切以\"服務\"為中心,完全拋棄了具體的編程的技術、環境、平臺等因素的限制,使得開發企業能有效利用原有的系統和數據,更易于集成和管理業務系統的復雜性并顯著地減少系統開發和集成的成本。
以下給出本系統基于SOA的面向服務的體系結構構架圖:

如上圖所示,系統的整體構架大致可以劃分為學校端、區縣端、省市端以及客戶服務中心端四個松散耦合的子系統。整個系統構架于SOA基礎上(用WEB SERVICE技術實現SOA構架),各個子系統之間的數據傳輸與交換是通過基于XML的Web Service服務來實現的。各系統互不干擾、互相獨立又互相協作,SOA技術使得整個體系結構更具擴展性、靈活性、平臺無關性和柔韌性。SOA解決了本系統的整體體系構架,那么接下來我們簡要分析一下實現系統的整體分層結構和相關的框架支持技術。
3.2基于J2EE的多層結構設計
高質量的J2EE/Java EE系統標準實際就是OO設計的標準,松耦合是OO設計的主要追求目標之一,那么無疑解耦性成為衡量J2EE/JEE質量的首要標準。實際選擇中,還需要兼顧可伸縮性/性能/開發效率等方面綜合考慮。典型的J2EE/Java EE至少劃分三個層次:表現層/業務邏輯組件層/持久層:
3.2.1表現層框架
表現層主要的功能和任務是復雜與客戶的GUI頁面交互,請求的提交和應答。表現層技術框架比較成熟的是基于MVC模式的STRUTS、WebWork、JSF等組件技術。借用MVC設計思想,實現顯示(VIEW)、業務處理(MODEL)、控制(CONTROLLER)三層分離,獨立實現,減少模塊的關聯,實現高內聚。MVC三層結構如下圖:

典型的,表現層業務邏輯流程大致可以分為:客戶(Client)通過GUI頁面發出業務請求->STRUTS控制層獲取客戶請求,調用->Request Processor處理客戶情況->ACTION獲取客戶提交表單并調用業務邏輯接口'業務代理處理業務邏輯->處理結果返回給ACTION->通過STRUTS控制層返回客戶頁面->View客戶端顯示請求結果。具體處理序列如(上頁)圖:
MVC模式的優點:
(1) 可以為一個模型在運行時同時建立和使用多個視圖。變化-傳播機制可以確保所有相關的視圖及時得到模型數據變化,從而使所有關聯的視圖和控制器做到行為同步。
(2) 視圖與控制器的可接插性,允許更換視圖和控制器對象,而且可以根據需求動態的打開或關閉、甚至在運行期間進行對象替換。
(3) 模型的可移植性。因為模型是獨立于視圖的,所以可以把一個模型獨立地移植到新的平臺工作。需要做的只是在新平臺上對視圖和控制器進行新的修改。
(4) 層次清晰。實現了業務邏輯與視圖的分離,加速開發速度,降低系統復雜度和成本。
3.2.2業務邏輯層框架
業務邏輯層是整個系統的核心,它是整個系統的業務(領域)的邏輯計算和處理中心,是表現層業務服務的提供者和數據持久層功能的使用者。業務邏輯層框架的構建應該考慮其可伸縮性、靈活性、定制性、透明性、快速構建性等指標。現在主流的開源業務組件框架主要有EJB2/EJB3、Spring Framework 、Jdon Framework:
通過對以上組件框架技術的分析,Spring Framework自從推出以來使用非常廣泛,備受推崇。
參考圖3-4框架結構分析:Spring框架包含許多特性,并被很好地組織如上圖所示的七個模塊中:
Core 封裝包是框架的最基礎部分,提供IoC和依賴注入特性。
構建于Core封裝包基礎上的 Context封裝包,提供了一種框架式的對象訪問方法,有些象JNDI注冊器。
DAO 提供了JDBC的抽象層,它可消除冗長的JDBC編碼和解析數據庫廠商特有的錯誤代碼。 并且,JDBC 封裝包還提供了一種比編程性更好的聲明性事務管理方法,不僅僅是實現了特定接口,而且對所有的POJOs(plain old Java objects)都適用。
ORM 封裝包提供了常用的\"對象/關系\"映射APIs的集成層。 其中包括JPA、JDO、Hibernate 和 iBatis 。利用ORM封裝包,可以混合使用所有Spring提供的特性進行\"對象/關系\"映射,如前邊提到的簡單聲明性事務管理。
Spring的 AOP 封裝包提供了符合 AOP Alliance規范的面向方面的編程(aspect-oriented programming)實現,讓你可以定義,例如方法攔截器(method-interceptors)和切點(pointcuts),從邏輯上講,從而減弱代碼的功能耦合,清晰的被分離開。
Spring中的 Web 包提供了基礎的針對Web開發的集成特性,例如多方文件上傳,利用Servlet listeners進行IoC容器初始化和針對Web的application context。
Spring中的 MVC 封裝包提供了Web應用的Model-View-Controller(MVC)實現。Spring的MVC框架并不是僅僅提供一種傳統的實現,它提供了一種 清晰的 分離模型,在領域模型代碼和web form之間。并且,還可以借助Spring框架的其他特性。

3.2.3持久層框架
數據持久層位于領域層和基礎架構層之間。由于對象范例和關系范例這兩大領域之間存在\"阻抗不匹配\",所以把數據持久層單獨作為J2EE體系的一個層提出來的原因就是能夠在對象-關系數據庫之間提供一個成功的企業級映射解決方案,盡最大可能彌補這兩種范例之間的差異。
數據持久層的實現技術主要有:1、JDBC許多開發者用JDBC進行數據庫程序的開發。這種方式很多情況下都使用DAO模式,采用SQL進行查詢。雖然用此方式可以使應用程序代碼與具體的數據庫廠商和數據庫位置無關,不過JDBC是低級別的數據庫訪問方式,JDBC并不支持面向對象的數據庫表示。JDBC數據庫表示完全圍繞關系數據庫模型。在大型應用程序的DAO中書寫這樣的代碼,維護量是非常大的。2、EJB 在J2EE的規范中,為EJB定義了兩種持久化的解決方案:一種是BMP,另一種是CMP。其中CMP不需要將SQL語句加入到代碼中。目前,在采用J2EE的應用中,EJB CMP方式得到了廣泛應用。更加引人注意的是,隨著EJB規范的發展,CMP也包含了一些高級關系的內容。但是,CMP的使用比較復雜,對很多開發人員來說比較難以掌握。而且,不是在所有的情況下都適合在系統中采用EJB,而且想要非常清楚的了解EJB規范也是非常費時的。在用EJB編碼前,先要讓專家理解API,然后需要了解每一個容器部署時所要關注的技術。此外,許多情況下商用容器的性能和支持也不是很好。3、Hibernate是一個開放源代碼的對象關系映射框架,它對JDBC進行了輕量級的對象封裝,使Java程序員可以隨心所欲的使用對象編程思維來操縱數據庫。它不僅提供了從Java類到數據表之間的映射,也提供了數據查詢和恢復機制。相對于使用JDBC和SQL來手工操作數據庫, Hibernate可以大大減少操作數據庫的工作量。 另外Hibernate可以利用代理模式來簡化載入類的過程,這將大大減少利用。Hibernate QL從數據庫提取數據的代碼的編寫量,從而節約開發時間和開發成本。Hibernate可以和多種Web服務器或者應用服務器良好集成,如今已經支持幾乎所有的流行的數據庫服務器。
通過以上持久層技術的對比分析,可以總結:Hibernate是一個功能強大,可以有效地進行數據庫數據到業務對象的O/R映射方案。Hibernate推動了基于普通Java對象模型,用于映射底層數據結構的持久對象的開發,通過將持久層的生成自動擴展到一個更大的范圍,Hibernate 使開發人員專心實現業務邏輯而不用分心于繁瑣的數據庫方面的邏輯,同時提供了更加合理的模塊劃分的方法,可以大大減少操作數據庫的工作量,節約開發時間和成本。
2.4系統的總體分層結構圖
通過對系統的層次拆分以及對各層應用框架技術的對比分析,可以歸納總結出本系統基于J2EE的多層結構,如下圖示:

參考上述分層結構圖,系統在表現層采用了基于MVC構架的STRUTS框架,在業務邏輯層采用了時下比較流行的Spring技術框架,在數據持久層采用了對象關系映射框架Hibernate。從整體分層結構來看各層層次分明、責職清晰,為構建擴展性強、靈活度高、復用性好的系統提供了實現基礎。
至此,本文介紹和分析了基于SOA面向服務的體系構架和基于J2EE的整體分層結構技術,從整體業務模型到整體構架、分層設計都給出了解決問題的方法途徑。接下來的篇幅本文將著重介紹實現系統的具體技術流程和算法設計。