摘要:本文在原有的多層架構基礎之上。重新抽象出七層系統架構,并對各層的特點和技術實現進行了較為細致闡述。
關鍵詞;出口退稅管理系統;系統架構:七層架構
中圖分類號:TP311.1
文獻標識碼:A
文章編號:1002-2422(2010)05-0045-03
1 總體架構設計
1.1設計約束分析
在出口退稅系統設計時,需要注意下列約束限制:
(1)開發的系統本身定位為現有系統的補充和擴展,所以不能對原審核系統數據安全性造成影響,也不能影響原系統工作業務流程。同時,在數據庫的設計和使用上必須保證與原系統編碼的一致。
(2)必須充分利用稅務系統軟硬件資源及現有網絡架構,避免增加新設備。
1.2數據分布模式選擇
數據分布模式是指數據在地市稅務局集中存放,市局退稅機關和縣區征收分局不設本地數據庫服務器。數據分布模式的特點為:數據集中、無冗余,數據一致性好。便于管理和維護,系統維護成本低。網絡擴展性強,數據安全性較好。業務監控能力最強。但同時對于市局服務器設備、網絡設備、通訊線路的可靠性要求也比較高。
數據完全集中,所有查詢及數據庫訪問操作均在市局主服務器上完成,服務器的運算負擔重,數據丟失風險大。考慮到目前稅務系統網絡通訊建設已經比較完善,而出口退稅數據量相對征收信息量還是比較小的,可以采取該模式來實施。
1.3總體架構
按照系統數據集中管理方式劃分:出口退稅管理系統采用總局、省局兩級集中處理。
省局端系統:省局端系統主要承擔出口退稅業務處理,系統直接受理企業申報數據,辦理出口退稅業務,出口退稅全部的業務數據集中在省級稅務機關。
總局端系統:主要承擔從全國的高度監控管理出口退稅工作。其系統總體結構如圖1所示。

在深入分析出口退稅業務特點基礎上,基于J2EE采用了7層架構:數據庫層、持久層(DAO)、業務邏輯層、門戶(Facade)層、代理(Delegate)層、WEB端控制層、頁面展現層。同時在這7層架構之上,引入Apache Jakarta Struts的MVC模式,把視圖一控制一模型進一步分離。軟件架構如圖2所示。
2 系統架構各層設計
2.1持久層設計
數據持久層的設計目標是為整個項目提供一個高層、統一、安全和并發的數據持久機制。完成對各種數據進行持久化的編程工作,并為系統業務邏輯層提供服務。
系統具有業務復雜多變、數據量大、長事務處理、計算量大、多用戶并發等特點,在設計和選擇系統的持久層時,選擇了JDBC+Hibernate的持久層方案。
Hibernate是一種新的ORM映射工具,是JDBC的輕量級的對象封裝。Hibernate在一定程度上解決了關系型數據庫和對象之間的阻抗不匹配,使可以通過Hibernate基于數據庫進行面向對象的設計和實現,從而更好地實現系統的可擴展性和穩定性。
Hibernate可以用在JDBC可以使用的任何場合,Hiber-nate不僅提供了從Java類到數據表之間的映射,也提供了數據查詢和恢復機制。
Hibernate是一個和JDBC密切關聯的、獨立的對象持久層框架,可以搭配各種App Server、Web Server、EJB Con-Miner共同使用。Hibernate的兼容性僅同JDBC驅動、底層數據庫產品間有一定的關系,和使用Java程序、App Server沒有任何關系,也不存在兼容性問題。
下面根據系統的一些特點,設計了直接使用JDBC和使用Hibernate兩種情況。
(1)直接使用JDBC(Procedure)。在目前的系統設計中,直接使用JDBC主要是的使用存儲過程來實現業務邏輯。
存儲過程由于是基于集合語言的,適合對集合數據進行處理。其優勢在于:①在性能方面,由于可以充分使用數據庫的優勢,如可以使用服務器端游標等。同時存儲過程可以不用重新編譯,不用重新生成執行計劃,所以存儲過程適用在一些計算密集、長事務的處理場景中;②在部署和維護方面,任何存儲過程的修改,不需重新編譯部署前端應用程序,只需重新編譯存儲過程即可,所以存儲過程在一定程度上也適合一些24小時運行的或業務邏輯復雜多變的系統上;③在網絡傳輸方面,由于使用普通的SQL語句或其他操作數據庫方式,均需將SQL語句傳遞至數據庫,而存儲過程只需傳遞存儲過程所需的若干參數,可以減少由于多個業務環節而導致的應用程序和數據庫之間的交互次數。
劣勢在于:①在移植性方面,由于存儲過程中不可避免地會采用當前數據庫的一些特性,那么當系統切換到不同數據庫時,無疑會帶來很大的麻煩,這也是存儲過程的一個先天的缺陷;②在數據庫方面,如果過多的使用存儲過程,會給數據庫服務器帶來很大的性能壓力。
(2)使用Hibernate。Hibernate對數據庫中的表、表間關系通過映射文件進行較好的映射,使得能夠象處理對象一樣操作表,而無需了解具體的數據庫細節。Hibernate完成了記錄至JAVA對象的映射,一種行數據處理的映射,通過Hibernate操作單條記錄時會比較方便和快捷。此外,Hi-bernate在使用過程中,Hibernate會維護數據表間關系,需要維護表和對象的映射關系,這些Hibernate進行了緩存,成為一級緩存,而對動態POJO的緩存,稱為二級緩存。
其優勢在于:①在開發效率方面,如果在業務邏輯層,即在前端應用系統中實現業務邏輯,可以充分享受高級語言的集成開發環境帶來的各種便利;同時可以使開發人員無需過多地關心數據庫細節,從而可以有更多地精力投入在業務邏輯的實現上;②在設計分析方面,如果用面向對象的分析方法對業務邏輯層進行良好的設計,會使系統具有良好的可擴展性和可復用性;③在可擴展性方面,對于一些業務的變更,只需做很少的修改,如果是一些非關鍵字段、計算字段的增改等,甚至可以不需修改任何業務邏輯層的代碼,就可實現修改。
劣勢在于:在運行效率方面,由于通過Hibernate操作數據表記錄,Hibernate需要將數據表記錄映射成JAVA對象,建立緩存,在大數據量集合計算、處理時,沒有太多性能上的優勢。
2.2業務邏輯層
出口退稅管理系統,幾乎所有的業務邏輯運算都在E-JB端完成,并且系統具有數據量大,操作復雜,計算頻繁等特點,所以業務邏輯層架構設計的好壞直接影響到整個系統的運行速度、可擴展性、可維護性、組件可重用性及開發效率等各項指標。
針對系統用戶具有操作密集,交互密集,計算密集這三個特點,整個系統的架構充分考慮到這些特點,對系統架構的各個層次都進行了設計優化,主要體現在:
(1)設計模式和緩存機制的靈活運用。
(2)拋棄了重量級的實體EJB CMP和BMP,只采用Session Bean來完成業務邏輯。目前的EJB規范中,依據EJB的應用場合和其本身的特性,共分為三種類型:實體Bean、會話Bean和消息驅動Bean。
2.3門戶層
門戶層位于代理層和業務邏輯層之間,主要作用是為了降低層間的通信和相互依賴關系,使某一層的修改或調整不會影響到其它層,系統在這兩層之間采用統一接口的方式,門戶層主要應用了Facade模式。
結構型模式Facade模式通過在子系統間提供一個Fa-eade類或接口來達到子系統間的松散藕合和低依賴。
有兩種方式建立接口Facade層:一種是在代理層建立,另一種是在業務邏輯層建立。
2.4代理層
代理層位于WEB端控制層和EJB層之間,主要作用是把WEB端控制層和EJB層無縫整合在一起,完成業務邏輯并將數據展現給用戶。
在系統中,WEB層和EJB層如何進行銜接是一個關鍵的問題,必須考慮到并行開發效率、系統運行效率、網絡壓力、系統耦合性等因素。因此,在本系統的軟件架構設計上,在WEB層和EJB層之間引入了代理層。在系統中規定,代理層是WEB層和EJB層交互的唯一途徑。代理層不但為WEB層隱藏了調用EJB的具體細節,而且為WEB層提供了統一的接口,并進行了J2EE服務器的上下文緩沖,使得系統在性能和開發效率上都得到提升。
2.5Web端控制層
在WEB端控制層引入了Apache的Struts框架。
由于出口退稅系統界面較多,業務數據多樣化,有時需要為同樣的數據提供多個視圖,使用JSP、Servlet進行控制比較復雜,所以采用MVC模式(Model-View-Controller,模型一視圖一控制器),將視圖、數據模型和控制從架構上進行分離,使得模塊的職能更加清晰,這樣對于開發和維護都比較方便,很好地實現了數據層與表示層的分離。
在MVC模式中,Model層實現系統中的業務邏輯,在系統中用JavaBean或EJB來實現,并通過代理層實現對業務層的代理;View層用于與用戶的交互,通常主要用JSP來實現;Controller層是Model與View之間溝通的橋梁,可以分派用戶的請求并選擇恰當的視圖以用于顯示,同時也可以解釋用戶的輸入并映射為模型層可執行的操作。
實現MVC模式的框架有很多種,在出口退稅系統設計中采用了流行的Struts架構來實現。是由Apache軟件組織提供的一套開發源代碼的項目,其廣泛的適應性和高度的擴展能力使其成為了目前Java的Web開發者所逐步認可的標準。
2.6緩存技術的使用
在設計中,充分估計了一些容易造成性能瓶頸的環節,從緩存機制上進行了性能優化。在數據讀取,輸入,輸出等均有緩存機制。
特別對于交換密集型的操作,由于信息需要在客戶端、WEB服務器、J2EE服務器、數據庫服務器之間頻繁傳輸,而這些數據往往在一定時間段內是不變化的,如:用戶權限菜單的信息、用戶可操作的企業列表、WEB服務器查找J2EE服務器的上下文環境,以及其他一些穩定的業務數據,都進行了緩存。
在考慮緩存機制時,也應充分考慮數據的變化性。被緩存的數據一旦被修改,系統立刻通知相關摸塊更新緩存數據。這樣不但提高了系統的性能,而且保證了用戶操作的正確性。這樣,在引入緩存機制之后,系統在頻繁交互的重復數據環節上,性能得到了大幅度提高。
3 結束語
系統架構根據系統特點進行了合理的分層,抽象為七層,并對各層的職責分類,保證了系統的高性能、可擴展性、穩定性和模塊、代碼的高復用。在各層的技術實現上,采用了Hibernate、Struts、POI、依賴注入等技術框架和設計理念,保證了系統的技術前瞻性。