周 敏 高 濟 金智勇
1(浙江大學軟件學院 浙江 杭州 310027)2(浙江大學計算機科學與技術學院 浙江 杭州 310027)3(浙江樹人大學信息學院 浙江 杭州 310015)
?
基于MVC+ORACLE+ODAC的企業內部業務數據系統的設計與實現
周敏1高濟2金智勇3
1(浙江大學軟件學院浙江 杭州 310027)2(浙江大學計算機科學與技術學院浙江 杭州 310027)3(浙江樹人大學信息學院浙江 杭州 310015)
當前不少大企業都以業務數據為基礎,來判斷企業的投資領域和員工的績效,業務數據的統計和呈現尤為重要。大多企業內部管理系統的現狀:前臺不可配置因而維護量大,后臺業務復雜因而團隊開發效率低、新版本發布延遲,以及跨國公司業務數據不能及時同步因而數據不可靠。針對這一需求和現狀,采用基于MVC+ORALCE+ODAC的架構開發,結合SVN、Robocopy和Jenkins機制自動同步數據和實時發布新版本。對系統的整體設計模型、完全可配置的前臺、MVC+ORACLE+ODAC架構在系統中的應用和關鍵技術進行重點描述。該系統目前已應用于杭州的某大公司,實際應用證明該系統具有可配置、高效、可靠和安全的特點。
業務數據MVCODAC配置Jenkins
隨著互聯網、物聯網和云計算等技術的高速發展[1],我們早已步入大數據的時代[2]。企業的業務數據對企業的發展具有重要意義,因此不少大企業都有自己的內部業務數據管理系統,借以來統計業務、分析市場、判斷投資和考核員工等。
然而目前大多相關系統在開發和維護中的現狀:業務邏輯和頁面顯示混合在一起,不利于團隊開發;數據訪問方式采用內嵌SQL語句,不利于系統的維護;前臺維護成本高,尤其在新年度增加新業務或部門時;跨國子公司間業務數據不能及時同步,數據準確性低。同時,大公司的業務復雜多變,導致團隊開發效率低下,新版本發布延遲。
由于企業需求和市場需要,開發此類系統已成為科研單位和眾多公司承擔的項目。本文鑒于大多大公司采用ORACLE數據庫,采用基于MVC+ORACLE+ODAC的架構開發,借助Jenkins機制實時同步數據和發布新版本,采用反射的機制獲取前臺動態和靜態數據,基于JSON[3]的Ajax更新前臺呈現方式,為.NET平臺中結合ORALCE數據庫的MVC開發提供了一種解決方案。
相比傳統的意義上的Web開發框架,本框架中視圖層和業務層分離,數據訪問層模型可根據數據庫表結構的變化而自動更新,減少編程工作量并加大了代碼的重用率,利于團隊分模塊開發,同時也加強了程序的可維護性。
1.1系統框架
為了便于團隊的分工開發,提高團隊的開發效率,并鑒于實際開發中大多采用的是ORACLE數據庫,本企業內部業務數據系統應用MVC+ORACLE+ODAC框架[4]完成開發,其基本結構如圖1所示。

圖1 企業內部業務數據管理系統框架
用戶通過瀏覽器發送請求給控制器,控制器根據具體邏輯訪問模型并處理,發送給視圖,通過視圖呈現給用戶。在該圖中控制器和視圖相當于Web三層結構中的表示層(UI)。Web三層結構中的業務邏輯層(BLL)和數據訪問層(DAL)對應于MVC架構中的模型。本系統采用DatabaseFirst(數據庫優先)的開發方式,數據訪問采用edmx模型和相關組建(ODAC),它實現了業務邏輯層(BLL)和數據庫中數據的交互。原始數據源是ORACLE數據庫,存儲本系統中需應用到的業務數據。
1.2功能模塊
根據實際需要,本企業內部業務數據系統主要分為8大模塊,各個模塊有相應子模塊,如圖2所示。

圖2 企業內部業務數據管理功能模塊
下面對各個模塊的功能簡要說明:
(1)User模塊:通過登錄完成對公司用戶的角色認證。系統將根據用戶的角色,對管理系統業務數據的訪問進行控制,并提供個性化的操作和服務。
(2)RoleManager模塊:對公司所有用戶進行角色管理,以及對其他模塊需要的角色控制,比如MeetingScore等,并滿足以后用戶拓展的需求。
(3)Dashboard模塊:這是公司的核心模塊,公司各部門的業務數據都詳細統計在該模塊中,該模塊的主頁面可以完全后臺配置,并滿足各部門需要。采用反射的方式,將靜態和動態的數據呈現出來,并對每一具體的數值都以表格詳細統計出來,每一組數值都以圖表形式直觀展現。
(4)Program模塊:關于公司項目情況的統計,按照公司的各種統計方法,按照日、周、月以圖表的方式動態呈現。
(5)Metrics模塊:各個部門具體業務數據的圖表展示,各部可以上傳自己部門當年、季度目標,實時繪制當前業務情況。
(6)EmailSend模塊:系統根據用戶的角色,定時向所有用戶發送合乎角色的信息,并可以根據用戶收藏(關注)的頁面,定時發送給該用戶相關的業務數據。
(7)MeetingScore模塊:公司的會議系統模塊,包含打分、出勤、分數統計和分析等情況。
(8)JenkinsMange模塊:包含對系統實時同步子公司數據和實時發布當前最新版本的系統配置。
1.3數據庫設計
本文對數據庫Dashboard部分的設計做詳細描述,完全可配置的Dashboard前臺,其余業務數據、權限管理等數據庫設計這里不予介紹。Dashboard模塊數據庫設計如圖3所示。

圖3 Dashboard模塊數據庫設計
Dashboard設計為完全可配置的前臺,Dashboard表為具體某一階段或某一部門的業務集名稱。具體的該業務集中的所有業務和業務數據內容由DashboardRecord表存儲和維護。
在DashboardRecord表中,KPI_Name為該業務在頁面上顯示的名稱,KPI_NC存儲該業務訪問本業務中其他頁面(比如該業務所屬分類、圖表分析和具體業務詳情等)以及參數的序列化值。ClassType和Parameters為通過反射的方式獲取數據的類名和初始化參數,具體參見1.4節反射機制和類圖。DisplayOrder為該業務對應分類在頁面中顯示的順序,InnerOder為該業務在所屬分類中顯示的次序。IsVisible進行訪問權限管理,當IsVisible為“Public”時,為公司內所有用戶都可訪問,當IsVisible為具體角色名時,只有擁有該用戶角色的用戶才可見。
1.4反射機制和類圖
C#反射(Reflection)機制是在ADO.NET運行時獲取類型信息的方式,即可以通過類名在運行創建相應類的對象。因此,為實現前端業務數據的顯示方式是可配置的,只需要對相應記錄配置類名和修改相關參數即可。
本系統中公司的數據分為靜態數據和動態數據,對于動態數據通過存儲過程從數據庫中獲取數據,由相應的類來實現,對于靜態數據更加容易,存儲在DashboardStatic表中(見1.3節圖3)常見的數據類型格式畢竟有限,根據不同的顯示格式可以設計出不同的類來獲取數據。具體UML類圖設計如圖4所示。

圖4 Dashboard模塊UML類圖設計
設計思路如下:定義接口IDashboard,有一個行為是GetData,并定義一個實現該接口的抽象類DashboardItem。派生出獲取動態類數據的類DynamicDashboardItem和獲取靜態類數據的類StaticDashboardItem,在以此分別派生為Positive和Negative的類(比如圖3中,靜態數據表DashboardStatic中Value不小于Target為Positive,否則為Negative,動態數據類似)。
對于靜態數據,數據從圖3中DashboardStatic中獲取,對于動態數據通過不同的類獲得,比如這里的OCDR、NCDR和Outage類。這時,參考圖3中DashboardRecord表,即可將ClassType(UML類圖中的類名)和Parameters作為參數,通過反射獲取Dashboard中所有的業務數據。
2.1ODAC介紹
ODAC是Oracle數據訪問組建,ODAC編程人員可以直接使用Oracle調用接口(OCI),使用第三方語言(本文是C#)調用Oracle數據服務器中的存儲過程、函數或者通過SQL語句進行相關的操作。
目前,大多數ASP.NET中MVC開發模式,多采用MVC+MSSQL+EF的開發平臺,使用MVC+ORACLE+ODAC平臺的研究相對很少見,然而實際開發中,大多大企業使用的是ORACLE數據庫,本文基于這種開發平臺彌補了這方面研究的不足。
2.2基于ORACLE的Database First開發模式
在ADO.NET中EntityFramework框架中,針對常用開發場景和編程模式優化出新的API:DbContextAPI。DbContext可以被用于三種開發模式:DatabaseFirst,ModelFirst,CodeFirst。在ASP.NET的開發模式中,DatabaseFirst開發模式是系統開發中的一個傳統模式,對需求固定的開發場景來看更為有效;使用ModelFirst可以通過設計模型和模型間的關系,快速映射出實體類和數據庫表的設計;CodeFirst多用于需求不斷變化的敏捷開發中,通過定義可變化的實體類模型映射出現有的數據庫或者產生新的數據庫結構。
鑒于大部分公司的數據存放在ORACLE數據庫服務器中,公司的其他系統仍舊依賴該數據庫,并且本系統需求比較固定,因此本文中使用DatabaseFirst開發模式,并結合ODAC組建,數據訪問將基于數據庫中關系表及結構生成的模型edmx實體(Model)框架。
2.3MVC介紹
MVC由TrygveReenskaug提出,是“Model(模型)-View(視圖)-Controller(控制器[5])”的縮寫[6]。下面結合Web三層架構和實際開發分析MVC模式如下:
模型是MVC設計的核心基礎,它是系統的業務邏輯層和數據訪問層。模型可以作為控制器和視圖之間的載體,實現數據驗證和維護;模型也處理業務邏輯,是系統的業務邏輯層(BLL)。本文中的edmx實體數據模型是數據訪問層(DAL)。在企業內部業務數據系統中,模型很好地完成了數據庫中信息和應用程序的映射和訪問。
視圖是表示層,用戶交互的界面。主要負責顯示數據和用戶輸入,并不參與任何實際的業務處理。它通過模型處理后顯示相應的信息或者直接通過控制器中對應的Action返回需要的信息。結合Razor語法,書寫簡潔并且可以對顯示的內容進行進一步的處理,同時和HTML語法很好的兼容。
控制器在三者中扮演著非常重要的角色,它是界面和視圖的協調者[7]。接收用戶的輸入,結合模型響應給對應的視圖。在本系統中,用戶通過瀏覽器發送的頁面請求,控制器接收并處理請求信息,并結合模型去獲取相應的數據??刂破饔行У貙崿F了視圖和業務邏輯的分離。
MVC這種松耦合的架構特性有利于系統的升級和拓展以及團隊開發,編程人員關注特定的層次,并行開發。數據庫表結構的改變可自動更新出新的實體模型,大大提高了系統開發的靈活性和配置性。
2.4MVC、 ORACLE和ODAC之間的交互
下面以Dashboard主頁上所有業務數據列表查詢為例,詳細說明MVC(模型、視圖和控制器)內部與ORACLE數據庫之間信息交互的整個流程。在本系統中,它們的相互關系[8]如圖5所示。

圖5 MVC、ORACLE和ODAC間的交互關系圖
用戶通過瀏覽器訪問Dashboard主頁,到獲得頁面返回的結果,需要經過以下9個步驟。
(1) 用戶通過瀏覽器頁面請求,向控制器發出相關命令。
(2) 控制器接收到請求,將請求發送給Dashboard業務邏輯模型(BLL)進行處理。
(3)Dashboard業務邏輯模型(BLL)請求數據訪問,需要訪問數據庫獲取業務數據。
(4) 數據訪問模型edmx(DAL)借助ODAC組建,訪問ORACLE數據庫源數據。
(5)ORACLE數據庫返回業務數據給模型edmx,該模型對原始數據按照相應實體類進行驗證和組裝。
(6) 模型edmx將取得的數據交給業務邏輯模型(BLL),進行指定的業務邏輯處理。
(7) 業務邏輯模型處理完成后,返回給控制器。
(8) 控制器將數據發送給指定的視圖。
(9) 該視圖將Dashboard數據呈現給用戶。
至此,對Dashboard的一個訪問周期完成。從上述9個步驟不難發現,因為控制器的協調,頁面和業務邏輯分離,降低了架構的耦合性,提高團隊開發效率和代碼重用率。在本系統中,模型分為業務邏輯模型(BLL)和數據訪問模型(DAL),ORACLE數據訪問部分和模型中的實體類可通過數據庫映射產生,大大減少了代碼的書寫量。編碼工作主要集中在控制器和業務邏輯部分以及視圖部分,團隊分工也更加明確。
3.1實體數據模型
本系統使用VisualStudio2012(VS2012)開發平臺,采用MVC+ORACLE+ODAC架構,采用DatabaseFirst開發方式,可將ORACLE數據庫中的表和視圖,直接映射獲得數據庫訪問實體數據模型edmx和對應實體類以及實體類之間的關系。本文由于篇幅限制,僅展示模型edmx(DAL)中Dashboard、Roles、Users和MeetingScore模塊,Dashboard模塊如圖6所示,其余模塊如圖7所示。

圖6 edmx模型中Dashboard模塊圖

圖7 edmx模型中Users和Roles模塊圖
通過實體數據模型工具生成edmx模型框架,完成對數據庫中表和視圖的映射,并生成相應實體類。ORACLE數據庫中表結構或視圖的改變,可以通過MVC+ORACLE+ODAC直接更新模型和實體類,大大提高了開發效率。
3.2數據訪問
3.2.1數據庫連接
本系統中,數據庫連接字符串存放在Web.config文件中,在實際開發中,可通過ConfigurationSetting.AppSettings靜態字符串集合來獲取連接字符串。本系統Web.config文件中數據庫連接字符串如下所示:
connectionString=″userid=Dashboard; password=Dashboard; DataSource=db1;″ providerName=″Oracle.DataAccess.Client″/> connectionString=″metadata= res://*/DAL.ModelDashboard.csdl| res://*/DAL.ModelDashboard.ssdl| res://*/DAL.ModelDashboard.msl; provider=Oracle.DataAccess.Client; providerconnectionstring=" datasource=db1; password=Dashboard; userid=Dashboard"″ providerName=″System.Data.EntityClient″ /> 本文有兩個數據庫訪問字符串,分別為PortalOracle和EntitiesDashboard,后者在使用VS2012數據庫映射時自動添加。兩者本質上是同一數據庫db1的訪問字符串,但作用不同。前者在使用存儲過程時使用較多(詳見3.2.3節),后者對應edmx模型(即3.1節中的實體數據模型,ModelDashboard),通過實體數據模型可直接訪問數據庫(詳見3.2.2節)。 3.2.2LINQ to Entities ADO.NET是數據庫與.NET互操作的核心,而實體數據模型(edmx模型)則增強了.NET應用程序與數據庫的交互能力。通過實體數據模型,可更加簡便地與數據庫進行強類型的數據互操作,減少數據訪問所需要的代碼量。 LINQtoEntities允許編程人員使用C#根據實體數據模型編寫查詢、插入、修改和刪除操作,滿足大部分數據庫相關操作的需要。本文僅以MeetingScore查詢已參加并打分的所有會議為例,代碼如下: 1:EntitiesDashboarddb=newEntitiesDashboard(); 2:varmeetingInfos=(fromtempindb.MeetingScore 3:wheretemp.Attended==user 4:selecttemp.MeetingInfoID) 5:.Distinct().ToList(); 代碼第1行,是創建了一個名為db的實體數據模型,第2-4行使用LINQ表達式,從MeetingScore表中,查詢參加者為user的所有MeetingInfoID。第5行去重復并轉化為列表。下面只要結合MeetingInfo表即可查詢會議相關的其他信息。這里舉例,實際開發中可以實現更為復雜的操作。 3.2.3LINQ to DataSet DataSet是生成ADO.NTE的斷開連接式編程模型的關鍵組件,它是數據源中檢索到的數據在內存中的緩存。本系統中通過數據庫訪問字符串名PortalOracle(參考3.2.1),借助SqlDataAdapter,執行相應的存儲過程以及參數,實例化DataSet對象,并通過Fill方法實現DataSet和Oracle數據庫之間的橋接[3],將數據填充到DataSet中。最后通過LINQ查詢表達式從DataSet中獲取相應的數據。旨在解決關聯多張表和邏輯復雜的查詢過程中,效率低的問題。 Jenkins是基于Java開發的一種持續繼承工具,并且是一個開源軟件項目,可以用于監控持續重復的工作,本系統中主要的應用功能如下: (1) 持續的軟件版本發布和測試項目。詳見4.1節。 (2) 監控外部調用執行的操作。詳見4.2節。 4.1版本實時發布機制 為了提高團隊的開發效率,存儲和維護各個版本,并實時發布新版本,本系統采用結合SVN和Jenkins機制,實現系統新版本的實時發布,其基本結構如圖8所示。 圖8 團隊開發和實時發布版本機制 結合.NETFRAMEWORK中的ASPNET_COMPLIER,將VisualSVNServer中最新版本代碼同步,編譯后存放到指定目錄,即IIS服務器目錄。減少了人工編譯的繁瑣,提高了系統版本發布的效率。示例代碼如下: 1:PathC:WINDOWSMicrosoft.NETFrameworkv4.0.30319 2:aspnet_compiler-v/ -p.LTE-f-d-u.Build 該代碼第2行中.LTE為Localmoduledirectory(optional)的值,.Build為編譯后存放地址,即IIS部署目錄。 4.2自動同步機制 本文中通過Robocopy和Jenkins的結合使用,監控各分公司(跨國企業,各公司之間數據共享和一致性存在的延遲)的最新業務數據,實時刷新并保存數據的可靠性,減少了DBA的工作量并且保證數據刷新的正確性,實現類似4.1節。 在本系統中,界面設計應用到了HTML、CSS、Ajax、JavaScript和JQuery等相關技術。本文搭建的企業內部業務數據管理系統是一個比較復雜的網站,界面較多,本文列出主要界面,如圖9所示。 圖9 網站總體界面結構 本系統為企業內部業務數據管理系統,部署在公司內網,公司內部的用戶,可通過匿名方式訪問公共開放的企業內部業務數據。對于有權限設置的業務數據,系統做了強制登錄設置。 本文僅對Dashboard可完全配置的頁面作簡單展示,如圖10-圖12所示。圖10是Dashboard主頁,因為版面限制,這里只是Dashboard中的部分內容,有兩類為Quality和Parterner/Lab,每類中有相應的業務,業務的數據如右側P01-P08所示,數據顯示的格式、顯示的方式、背景顏色等都是可配置的。圖11為Dashboard配置的頁面,對具體業務在Dashboard中顯示的順序這里未展示,對ClassType、KPI等展示如圖11。圖12對NCDR業務數據進行編輯,可以更改名字、顯示順序、反射使用的類、參數以及年度目標等所有數據。 圖10 Dashboard主頁(部分內容) 圖11 Dashboard主頁配置頁面(部分內容) 圖12 對Quality中NCDR進行具體參數配置(部分內容) 本文在ADO.NET平臺中,基于MVC+ORACLE+ODAC的架構開發,彌補了MVC結合ORALCE開發方面研究的不足。利用Jenkins搭建的兩種機制,利于團隊開發并實時發布新版本以及自動同步業務數據。該架構中大大減少了編程工作量,并提高了代碼的復用率,降低了開發成本和維護成本。對于可配置的前臺,利用反射的方式獲取靜態和動態數據,提供出了合理有效的解決方案。此外,所開發的企業內部業務數據系統,對使用ORACLE數據庫開發的企業內部系統、對企業自動化測試、實時發布新版本、各子公司數據實時同步具有一定的參考價值。 [1] 任磊,杜一,馬帥,等.大數據可視分析綜述[J].軟件學報,2014,25(9):1909-1936. [2] 王元卓,靳小龍,程學旗.網絡大數據:現狀與展望[J].計算機學報,2013,36(6):1125-1138. [3] 孫光明,王碩.基于JSON的Ajax數據通信快速算法[J].計算機應用與軟件,2015,32(1):263-266. [4] 李志,賈克斌,李真真,等.基于.NETMVC架構的網上珠寶銷售系統的設計與實現[J].計算機應用與軟件,2013,30(3):186-189,192. [5]gvSIGMini.TheIntroductionofgvSIGMini[EB/OL].(2012-4-2).https://confluence.prodevelop.es/display/GVMN/Home. [6] 任廣震,侯進,王獻.MVC模式在B/S結構政務系統的應用研究[J].計算機應用與軟件,2014,31(8):54-58,74. [7]StefanSteiniger,GeoffreyJHay.Freeandopensourcegeographicinformationtoolsforlandscapeecology[J].EcologicalInformatics,2009(4):183-195. [8]OSM.AndroidsoftwaresupportingOpenStreetMap[EB/OL].(2012-4-2).http://wiki.openstreetmap.org/wiki/Android. DESIGNANDIMPLEMENTATIONOFINNERENTERPRISEBUSINESSDATASYSTEMBASEDONMVC+ORACLE+ODAC ZhouMin1GaoJi2JinZhiyong3 1(CollegeofSoftwareTechnology,ZhejiangUniversity,Hangzhou310027,Zhejiang,China)2(CollegeofComputerScienceandTechnology,ZhejiangUniversity,Hangzhou310027,Zhejiang,China)3(CollegeofInformation,ZhejiangShurenUniversity,Hangzhou310015,Zhejiang,China) Atpresent,manybig-sizedcompaniesdeterminetheachievementsininvestmentareasandtheperformanceofemployeesbasedonbusinessdata,thestatisticsandpresentationofbusinessdataisparticularlyimportant.Thestatusquoofmostofenterprises’innerbusinessdatasystemis:theuserinterfacecannotbeconfiguredsothatthemaintenanceloadisheavy;thebusinesslogiciscomplicatedsotheefficiencyofteamdevelopmentislowandthereleaseofnewversionwillbedelayed;andthebusinessdataofmulti-nationalcorporationscannotbetimelysynchronisedsothedataisnotreliable.Inviewofthedemandandthecurrentsituation,weusetheMVC+ORACLE+ODAC-basedarchitecturefordevelopment,combinesthemechanismsofSVN,RobocopyandJenkinsforautomaticdatasynchronisationandforreal-timenewversionsrelease.Inthispaper,weputtheemphasisondescribingtheoveralldesignmodelofthesystem,thefullyconfigurableuserinterface,theapplicationofMVC+ORACLE+ODACarchitectureinthesystem,andthekeytechnologies.ThesystemhasbeenappliedinalargecompanyofHangzhou.Practicaloperationsprovethatthesystemhasthecharacteristicsofbeingconfigurable,highefficiency,reliableandsafe. BusinessdataMVCODACConfigurationJenkins 2015-08-31。國家重點基礎研究計劃項目(2003cb31700);國家高技術研究發展計劃項目(2007AA01Z187)。周敏,碩士生,主研領域:軟件工程,多Agent服務協同。高濟,教授。金智勇,副教授。 TP ADOI:10.3969/j.issn.1000-386x.2016.10.0164 版本實時發布與自動同步機制

5 系統界面實例




6 結 語