監(jiān)理公司管理系統(tǒng) | 工程企業(yè)管理系統(tǒng) | OA系統(tǒng) | ERP系統(tǒng) | 造價咨詢管理系統(tǒng) | 工程設計管理系統(tǒng) | 簽約案例 | 購買價格 | 在線試用 | 手機APP | 產(chǎn)品資料
X 關閉

以不變架構應多變業(yè)務

申請免費試用、咨詢電話:400-8352-114

來源:泛普軟件

該樣本程序在充分利用已有開源框架的基礎上,開發(fā)了獨立的SinoSoftFrame架構,基于J2EE規(guī)范實現(xiàn),主要分為三層: Web層、業(yè)務層、持久層,很好地適應了財產(chǎn)保險行業(yè)的業(yè)務特點。

財產(chǎn)保險行業(yè)業(yè)務具有以下特點:

1.保險險類、險種、產(chǎn)品眾多

財產(chǎn)保險公司往往有包括企財險類、家財險類、責任險類、工程險類、車險類、船舶險類和貨運險等幾十個險類,上百個甚至幾百個業(yè)務險種。這些險類險種既有共性,又有特性,如何將這些共性和特性有機地組織在一起是我們必須要有效解決的問題。

2.全流程業(yè)務需要

財產(chǎn)保險業(yè)務往往包含了投保、承保、批改、理賠、收付、財務等多個業(yè)務處理環(huán)節(jié),同時還要通過掛接核保核賠管理和單證管理功能來降低企業(yè)的經(jīng)營風險。提供多種統(tǒng)計分析與查詢接口實現(xiàn)業(yè)務數(shù)據(jù)的統(tǒng)計分析,為企業(yè)經(jīng)營決策提供及時、有效的支持和幫助。為統(tǒng)一架構與開發(fā)規(guī)范,降低保險公司的開發(fā)和維護成本,設計的技術架構必須能滿足眾多子系統(tǒng)的業(yè)務需求與技術要求。

3.新產(chǎn)品上線要求時間短

保險公司為了搶占市場,爭奪客戶,從研發(fā)推出新產(chǎn)品到產(chǎn)品上線往往只有一周甚至更短的時間,這對我們的系統(tǒng)架構提出了極高的要求。

4.行業(yè)高速發(fā)展,業(yè)務多變

保險行業(yè)是個高速發(fā)展的行業(yè),業(yè)務多變,這是當前保險行業(yè)的特性決定的,我們只能去適應這些變化。所以,要求我們的架構必須具備很強的應變能力。

5.多語言支持

隨著保險業(yè)的逐漸對外放開,越來越多的外資保險公司成為我們的客戶。多語言支持成為這些客戶對我們系統(tǒng)的基本要求之一。

當然財產(chǎn)保險行業(yè)還有其他一些特點,如全國大集中數(shù)據(jù)管理方式、總公司-分公司分支機構的管理模式、無紙化單證管理等等。作為財產(chǎn)保險公司的行業(yè)解決方案,系統(tǒng)必須能夠適應以上這些行業(yè)特點,滿足財產(chǎn)保險公司向用戶提供新業(yè)務、新服務,適應市場競爭的需要; 滿足各地區(qū)業(yè)務的變化性,適應地方性險種管理的需要。

從保險的定義出發(fā),保險業(yè)務領域可分為投承保、批改、理賠等多個業(yè)務環(huán)節(jié),針對樣本程序,本文僅介紹承保業(yè)務。承保是保險業(yè)務的開始,承保信息關系到保單能否生成、與投保人能否簽訂合同、能否出具保單等。本樣板程序以保險領域中“投保處理”環(huán)節(jié)作為參照實現(xiàn),所以我們此處僅針對投保單相關的數(shù)據(jù)模型進行重點說明。

數(shù)據(jù)模型

“投保處理”環(huán)節(jié)涉及到了用戶投保錄入時的眾多信息元素,包含了基本信息、標的信息、險種費用信息、條款信息、共保信息等五大類。投保錄入主要涉及到四個主要的實體對象: 投保單主表、投保單險種表、標的主表、標的物險別責任表。除了這四個主要實體對象之間存在著一對多的對象關系外,每個實體對象還關聯(lián)著眾多的從屬對象。

投保單主表是整張投保單的概括信息,它的相關從屬表有投保兌換率表、投保單條款表、保險關系人表、收費計劃表等; 投保單險種相關表描述的投保單項下各險種的相關信息,當投保單中存在多險種時,險種表描述多條險種信息,它的相關從屬表有投保單保額保費表、險種條款表、險種費用表等; 投保單中的標的信息放在標的相關表中進行分類描述,以區(qū)分不同險種下的不同標的,它的相關從屬表根據(jù)險類的不同有財產(chǎn)險標的信息、車險標的信息、動態(tài)標的信息等等; 標的險別責任相關表是對投保單中標的最明細的描述。它的相關從屬表有標的物責任條款表、險別責任附加費表、險別責任免賠額表、險別責任賠償限額表等。

總體架構

本著“不重復造車輪但也絕不依賴于任何第三方框架”的設計思想,我們獨立設計開發(fā)了自己的基礎框架體系SinoSoftFrame,在此SinoSoftFrame框架體系上,在部分層面引入一些優(yōu)秀的開源產(chǎn)品,集成到我們的框架體系SinoSoftFrame中。這樣,當已集成的產(chǎn)品在技術和效率上無法滿足我們的業(yè)務需要時或在某個層面有更好、更快、更有效的新產(chǎn)品時,我們可以很容易地從SinoSoftFrame中完成新產(chǎn)品的升級替換,而對已開發(fā)完成的業(yè)務實現(xiàn)代碼不產(chǎn)生任何影響或?qū)⒂绊懡档阶畹?。SinoSoftFrame架構基于J2EE規(guī)范實現(xiàn),主要分為三層: Web層、業(yè)務層、持久層。

Web層采用MVC模式,主要任務是接收用戶從頁面提交的請求和最終返回處理結果。對于處理用戶請求來講,Web層的任務是讀取用戶提交的表單數(shù)據(jù),把HttpServletRequest中的表單數(shù)據(jù)和請求參數(shù)封裝到數(shù)據(jù)傳輸對象DTO中供業(yè)務層處理; 對于返回處理結果來講,Web層的任務是把業(yè)務層處理完畢后返回的數(shù)據(jù)傳輸對象DTO返回給JSP頁面展現(xiàn)給客戶。

業(yè)務層主要完成業(yè)務邏輯的實現(xiàn)。如業(yè)務數(shù)據(jù)校驗、業(yè)務邏輯處理、事務管理、記錄業(yè)務處理日志、拋出業(yè)務處理異常等任務。

持久層僅用來完成業(yè)務數(shù)據(jù)持久化和查詢讀取,這里采用關系型數(shù)據(jù)庫來完成數(shù)據(jù)的持久化保存,因此持久層主要完成數(shù)據(jù)庫的CRUD(增、刪、改、查),同時包含對存儲異常的處理等任務。

SinoSoftFrame通過模擬Spring的實現(xiàn)機制建立了自己的容器實現(xiàn)機制,并通過定義接口、擴展基類等方法將對第三方依賴的內(nèi)容封裝到SinoSoftFrame中,從而實現(xiàn)與第三方框架的解耦。下面重點說明一下在架構設計的三層上具體采用的實現(xiàn)方式或開源框架。

因Web層確定采用MVC的設計模式,而軟件開發(fā)領域有很多優(yōu)秀的MVC開源框架,如Struts、WebWork2、Spring MVC等等,但也各有其優(yōu)缺點。SinoSoftFrame的Web層實現(xiàn)選擇了Struts,原因主要是基于它歷經(jīng)6年的不斷成熟、它的穩(wěn)定開發(fā)團隊、它龐大的社區(qū)、用戶和程序員基礎。頁面展現(xiàn)仍采用了傳統(tǒng)的JSP+Taglib的實現(xiàn)方式。畢竟開發(fā)成本也是架構設計和選型要考慮的重要因素之一。

業(yè)務層框架的設計要求是增加模塊或代碼的復用性,降低業(yè)務類之間的耦合,減少程序修改帶來的“漣漪”效應。在SinoSoftFrame的業(yè)務層我們選擇了Spring。Spring是一種無侵入式的輕量級框架,可以用簡單的POJO去完成接口類的定義及實現(xiàn)的調(diào)用,絕大多數(shù)業(yè)務對象都不需要依賴于Spring;可以很容易對業(yè)務層進行單元測試; 它促進程序員養(yǎng)成好的編程習慣(把對接口編程而不是對類編程的代價幾乎減少到零)。當然,Spring框架帶給我們的優(yōu)勢不只以上這些,它就像系統(tǒng)的粘合劑,對系統(tǒng)各個層面各個環(huán)節(jié)的功能、實現(xiàn)框架都提供了無縫的支持。不過,最主要也是最重要的還是Spring的Ioc模式實現(xiàn)(Ioc通俗來說,就是在編制程序時,只要寫被調(diào)用者的接口代碼,具體子類實例可通過配置實現(xiàn))。

SinoSoftFrame選擇了Hibernate作為持久層實現(xiàn)。Hibernate是一種Java語言下的對象關系映射解決方案。

它為面向?qū)ο蟮念I域模型到傳統(tǒng)的關系型數(shù)據(jù)庫的映射,提供了一個使用方便的框架。它的設計目標是將軟件開發(fā)人員從大量相同的數(shù)據(jù)持久層相關編程工作中解放出來。Hibernate不僅負責從Java類到數(shù)據(jù)庫表的映射(還包括從Java數(shù)據(jù)類型到SQL數(shù)據(jù)類型的映射),還提供了面向?qū)ο蟮臄?shù)據(jù)查詢檢索機制,從而極大地縮短了手工處理SQL和JDBC的時間,而且它不會強迫修改對象的行為方式,不需要實現(xiàn)任何框架要求的接口。惟一需要做的就是創(chuàng)建一份XML“映射文檔”,告訴框架你希望能夠保存在數(shù)據(jù)庫中的類,以及它們?nèi)绾侮P聯(lián)到該數(shù)據(jù)庫中的表和列,然后就可以要求它以對象的形式獲取數(shù)據(jù),或者把對象保存為數(shù)據(jù)。同時,它可以支持多達十六種數(shù)據(jù)庫,包含企業(yè)級常用的Oracle、DB2、Informix、SQLServer、Sybase等。SinoSoftFrame系統(tǒng)架構如圖1所示。

同時,為了提供最佳的用戶體驗,SinoSoftFrame框架中還引入了Ajax的DWR實現(xiàn),加上Ajax的調(diào)用層次后,系統(tǒng)調(diào)用架構如圖2所示。

輔助工具

● 代碼生成工具JToolPad

設計師設計框架的目的是為了解耦、應變、統(tǒng)一規(guī)范、跨平臺、支持多語言,但程序員眼中的好框架更多的則是:簡單易用、快速開發(fā)。而SinoSoftFrame框架包含了三層,進行應用系統(tǒng)開發(fā)的程序員要面對眾多的接口和實現(xiàn)類以及多個配置文件,顯然并不簡單。為此,我們獨立開發(fā)了輔助代碼生成工具JToolPad,用以生成SinoSoftFrame框架中的部分類和配置文件。為了從程序員的角度查看該架構,我們將JToolPad可以生成的類和配置文件以及框架本身提供的基類去掉后的系統(tǒng)架構圖如圖3所示。圖3是程序員開發(fā)應用系統(tǒng)時的框架結構,而針對數(shù)據(jù)庫應用系統(tǒng)中大多數(shù)的單表增、刪、改、查操作,JToolPad還能生成更多的常見類及代碼,如圖4所示。

從圖4可以看到,程序員在結合JToolPad工具使用SinoSoftFrame框架時,大多數(shù)情況下都只需要完成Web層的頁面控制跳轉(zhuǎn)Action及業(yè)務層的接口和接口實現(xiàn)類即可,當然還有少不了的JSP頁面和Action配置文件。如果程序員還覺得麻煩,JToolPad甚至還可以根據(jù)實現(xiàn)類直接生成對應的接口類(當然從設計的角度出發(fā),不建議這么做)。

● 自定義標簽庫

為了進一步提高開發(fā)速度、統(tǒng)一頁面規(guī)范,SinoSoftFrame框架中提供了多種自定義標簽,如分頁導航條、通用操作命令按鈕、下拉列表、多語言自動支持、代碼選擇域、用戶自定義風格等。

以分頁導航條為例,開發(fā)人員只需在頁面中相應位置嵌入一段簡單的標簽庫代碼即可在頁面上顯示風格統(tǒng)一并可自動實現(xiàn)上頁、下頁、第一頁、最后一頁、跳轉(zhuǎn)到指定頁的分頁導航條。

● 基類及常用工具類

為了易于擴展SinoSoftFrame中各層的功能,也為了能通過AOP的方式完成業(yè)務的共性操作,如日志、權限檢測等等。SinoSoftFrame在各層的基類中都提供了豐富的功能,如SQL權限的自動封裝、功能權限的判斷與檢測、險種代碼的自動替換、調(diào)試的Log自動輸出等。

同時,SinoSoftFrame還提供了專門針對新版SinoSoftFrame框架開發(fā)的工具類,如頁面參數(shù)的封裝(單一對象封裝及List對象自動封裝)、Hibernate的增強處理等等。

● 業(yè)務通用組件

針對財產(chǎn)保險行業(yè)的領域特點及行業(yè)通用需求,SinoSoftFrame中還特意提供了很多業(yè)務通過組件,有用于頁面的通用組件,如: 嵌套多行輸入域、雙擊代碼選擇域、多語言自支持等。也有用于系統(tǒng)后臺處理的通用組件,如: 權限管理、影像管理、打印管理、代碼管理、工作流管理等。這些組件有的是通過直接調(diào)用類的方式實現(xiàn),有的是通過標簽庫實現(xiàn),大粒度的組件則是按組件的使用規(guī)則和使用方法實現(xiàn)。

● 引入的其他開源框架

針對應用系統(tǒng)開發(fā)中的特定問題框架也引入了其他的優(yōu)秀開源框架。數(shù)據(jù)檢驗采用了Validtor校驗框架,通過配置文件就可以對頁面的輸入域和多行數(shù)據(jù)域配置校驗規(guī)則; 在使用Ajax為用戶提供最佳體驗方面,采用了DWR框架; 系統(tǒng)安全認證采用了Acegi,Acegi是在Spring的基礎上實現(xiàn)的一套安全認證框架; 任務調(diào)度采用了Quartz調(diào)度框架。

鏈接:實現(xiàn)范例

我們通過“投保單保存”的一個實際調(diào)用過程說明一下SinoSoftFrame的具體實現(xiàn)。

● Web層信息錄入

我們將信息元素按業(yè)務分類組織在多個標簽頁中,如: 基本信息、標的信息、險種費用信息、條款信息、共保信息等。每個標簽頁中包含了該類的主要錄入元素。投保相關的頁面通過標簽的形式組織在一起,其中< mpc:page>標簽庫包含的內(nèi)容在頁面中的展現(xiàn)就形成了投保頁面上的標簽頁。其中每個標簽頁中的內(nèi)容又根據(jù)頁面信息分類的不同包含在不同的JSP頁面中,通過< jsp:include>標簽庫有機地組織在一起。

針對保險行業(yè)系統(tǒng)的國際化要求,JSP頁面基本上都是用STRUTS標簽以及自定義標簽來寫的。

● Struts配置文件相關定義

JSP頁面提交后交由Struts的Action處理,相應的處理類定義在配置文件app-prpall-struts.xml文件中。需要特別注意的是配置文件中包含的通配符“$”的一行forward,內(nèi)容如下:

< forward name="prepareInsert" path="/prpall/risk/$/EditFrame$.jsp business Type=Proposal"/>

該通配符是對保險行業(yè)產(chǎn)品眾多特點的特殊處理,配合SinoSoftFrame的目錄結構規(guī)范,開發(fā)人員只需在相應的Action中設置需要替換的險種代碼即可很輕松、很容易地完成相應保險產(chǎn)品的自動跳轉(zhuǎn)。

● Web層StrutsAction說明

系統(tǒng)應用框架根據(jù)Struts中的配置文件定義跳轉(zhuǎn)到GuProposalAction類,系統(tǒng)應用框架根據(jù)Request中傳入的actionType自動跳轉(zhuǎn)到的相應方法中進行處理(處理方法與actionType同名)。

Web層處理類Action首先將頁面參數(shù)組織到了投保單復合對象GuProposalDto中。SinoSoftFrame是通過paramUtils類完成頁面變量到Dto對象和列表對象自動轉(zhuǎn)換的。paramUtils是系統(tǒng)框架中提供的Request參數(shù)工具類。程序中簡單地通過paramUtils的generateObject方法和generateList方法就可以完成頁面參數(shù)到DTO對象間的自動映射。

● 業(yè)務層實現(xiàn)

投保單服務類由接口定義類和實現(xiàn)類組成。接口和實現(xiàn)的分離從一定程度上消解了依賴關系,具體實現(xiàn)可以在編譯期間發(fā)生變化。GuProposal-Service及GuProposalServiceSpringImpl類圖如圖5所示。在GuProposalAction中調(diào)用業(yè)務層進行投保單保存的代碼如下:


圖5 GuProposalService GuProposalServiceSpringImpl類圖

ServiceManager.getGuProposalService().insert(guProposalDto);

首先通過ServiceManager類的get方法來獲得該服務接口類,然后通過insert()接口方法完成投保單的保存。方法的具體實現(xiàn)是在服務接口實現(xiàn)類中完成的,系統(tǒng)編碼中引用的是接口類,而接口的實現(xiàn)類是由SinoSoftFrame在運行期注入的。接口和實現(xiàn)類的對應關系通過配置文件App-prpall-service.xml定義。

● 持久層實現(xiàn)

持久層主要由兩部分構成: 數(shù)據(jù)訪問對象DAO接口及其實現(xiàn)、實體對象PO。業(yè)務層通過調(diào)用持久層的DAO完成業(yè)務對象的持久化(即保存到數(shù)據(jù)庫中)。實體對象PO是和業(yè)務模型一致用以完成數(shù)據(jù)庫操作的業(yè)務對象,在進行投保單保存時主要有以下實體對象: 投保單主表、投保人及被保險人對象、投保費用。

系統(tǒng)框架要求實體對象必須遵從如下要求: 每個實體對象都必須繼承于自身的實體Base類(該實體Base類是通過工具自動生成的);為實體對象增加不需要持久化的擴展屬性時,在實體對象中增加; 嚴格保持Base類與數(shù)據(jù)業(yè)務模型(即數(shù)據(jù)庫結構)的一致。

Hibernate完成業(yè)務對象的持久化是通過hbm配置文件將對象屬性和數(shù)據(jù)庫表中的字段對應來自動完成的,因此配置文件hbm是不可缺少的(可以由工具自動生成)。

持久層DAO的設計模式和業(yè)務層類似,也是將接口和實現(xiàn)分開實現(xiàn)了持久層的解耦。接口類中定義了每個業(yè)務對象的持久化操作,實現(xiàn)類中實現(xiàn)了具體的持久化實現(xiàn)代碼。通過持久層的解耦,有效地解除了應用系統(tǒng)對SinoSoftFrame中引用的持久層框架的依賴,同時更有效地支持了各種存儲形式,包括自定義的存儲方式。

通過類圖可以看到,每個持久化對象都會對應一套DAO對象(該套DAO可以通過工具自動生成)。如果需要編寫自定義的數(shù)據(jù)庫操作,可以在DAO的接口和實現(xiàn)層中進行擴展(不需要修改DAOBase類)??梢钥吹?,只需調(diào)用Dao層的insert方法即可將投保單持久化對象保存到數(shù)據(jù)庫中。(ccw)

發(fā)布:2007-04-23 09:56    編輯:泛普軟件 · xiaona    [打印此頁]    [關閉]
太原OA系統(tǒng)
聯(lián)系方式

成都公司:成都市成華區(qū)建設南路160號1層9號

重慶公司:重慶市江北區(qū)紅旗河溝華創(chuàng)商務大廈18樓

咨詢:400-8352-114

加微信,免費獲取試用系統(tǒng)

QQ在線咨詢

泛普太原OA快博其他應用

太原OA軟件 太原OA新聞動態(tài) 太原OA信息化 太原OA快博 太原OA行業(yè)資訊 太原軟件開發(fā)公司 太原門禁系統(tǒng) 太原物業(yè)管理軟件 太原倉庫管理軟件 太原餐飲管理軟件 太原網(wǎng)站建設公司