基于MVC+ORACLE+ODAC的企业内部业务数据系统的设计与实现

2016-11-08 08:34金智勇
计算机应用与软件 2016年10期
关键词:数据模型视图控制器

周 敏 高 济 金智勇

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

0 引 言

随着互联网、物联网和云计算等技术的高速发展[1],我们早已步入大数据的时代[2]。企业的业务数据对企业的发展具有重要意义,因此不少大企业都有自己的内部业务数据管理系统,借以来统计业务、分析市场、判断投资和考核员工等。

然而目前大多相关系统在开发和维护中的现状:业务逻辑和页面显示混合在一起,不利于团队开发;数据访问方式采用内嵌SQL语句,不利于系统的维护;前台维护成本高,尤其在新年度增加新业务或部门时;跨国子公司间业务数据不能及时同步,数据准确性低。同时,大公司的业务复杂多变,导致团队开发效率低下,新版本发布延迟。

由于企业需求和市场需要,开发此类系统已成为科研单位和众多公司承担的项目。本文鉴于大多大公司采用ORACLE数据库,采用基于MVC+ORACLE+ODAC的架构开发,借助Jenkins机制实时同步数据和发布新版本,采用反射的机制获取前台动态和静态数据,基于JSON[3]的Ajax更新前台呈现方式,为.NET平台中结合ORALCE数据库的MVC开发提供了一种解决方案。

相比传统的意义上的Web开发框架,本框架中视图层和业务层分离,数据访问层模型可根据数据库表结构的变化而自动更新,减少编程工作量并加大了代码的重用率,利于团队分模块开发,同时也加强了程序的可维护性。

1 系统设计

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 MVC+ORACLE+ODAC在本系统中的应用

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]。接收用户的输入,结合模型响应给对应的视图。在本系统中,用户通过浏览器发送的页面请求,控制器接收并处理请求信息,并结合模型去获取相应的数据。控制器有效地实现了视图和业务逻辑的分离。

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 实体数据模型与数据访问

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中获取相应的数据。旨在解决关联多张表和逻辑复杂的查询过程中,效率低的问题。

4 版本实时发布与自动同步机制

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节。

5 系统界面实例

在本系统中,界面设计应用到了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进行具体参数配置(部分内容)

6 结 语

本文在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.016

猜你喜欢
数据模型视图控制器
面板数据模型截面相关检验方法综述
5.3 视图与投影
视图
Y—20重型运输机多视图
SA2型76毫米车载高炮多视图
财政支出效率与产业结构:要素积累与流动——基于DEA 和省级面板数据模型的实证研究
基于分位数回归的电力负荷特性预测面板数据模型
模糊PID控制器设计及MATLAB仿真
MOXA RTU控制器ioPAC 5542系列
倍福 CX8091嵌入式控制器