APP下载

一种支持MDA的基于EDM的软件开发方式

2012-08-01肖文辉刘洪星

关键词:开发方式概念模型开发人员

肖文辉,刘洪星

(武汉理工大学计算机科学与技术学院,湖北 武汉 430063)

1 MDA介绍

模型驱动架构(model driven architecture,MDA)是由对象管理组织(object management group,OMG)提出的[1]。MDA 将信息系统抽象成计算无关模型(CIM)、平台无关模型(PIM)和平台相关模型(PSM)3个层次。

在传统的软件开发流程中通常会经历需求分析、概要设计、详细设计、编码和测试等阶段,如图1所示。系统的模型和文档主要在设计阶段被创建,之后随着编码工作的开始,模型与代码之间可能会出现不同步的问题[2]。

图1 传统的开发流程

不同于传统的开发流程,MDA由系统的建模行为驱动,模型(而不是代码)在系统开发流程中处于核心地位[3],如图2所示。在MDA的开发流程中,由PIM完成分析设计工作,而与具体的平台和实现技术相关的PSM以及代码,则可借助第三方转换工具来完成。

图2 MDA的开发流程

2 实体数据模型

实体数据模型(entity data model,EDM)是微软实体框架(ADO.NET entity framework)的核心,它基于实体关系(ER)模型。EDM是一种构建在ER模型之上的概念模型。EDM由CSDL(conceptual schema definition language),SSDL(stores schema define language),MSL(mapping schema language)3个部分组成,分别描述应用程序业务层的实体和关系、逻辑模型的结构、概念模型与逻辑模型之间的映射[4]。

在实体框架中,EDM处于一个包含中间件映射引擎的运行环境中,该环境支持EDM与关系数据模型(RDM)之间的双向映射。开发人员可以使用语言集成查询 LINQ[5](language integrated query)或一种新的数据操作语言Entity SQL来操作EDM实例[6]。通过面向对象的方式对数据进行操作,传入的参数和得到的返回结果都是封装好的对象,而不是单独的字段值或一条一条的表记录。另外,数据操作代码和编程语言能较好地集成在一起,在代码执行之前,Visual Studio就可以检测数据操作代码在语法以及对象间的引用上是否存在错误。

EDM给概念模型带来了新的生命力。开发人员能够编写代码来操作EDM,然后依靠实体框架提供的工具将这些操作映射到特定的逻辑模型。这样可以将应用程序从关联特定的逻辑模型中解放出来[7],即使跨越多个数据引擎,应用程序也能工作在一个稳定的概念模型之上。

3 使用EDM实现MDA开发

在微软的集成开发环境Visual Studio 2010中,其 ADO.NET Entity Framework不仅支持从EDM到RDM的双向转换,而且也支持EDM到OOM(C#代码)的转换。而MDA的核心问题正是模型转换问题[8],因此,Visual Studio为实现基于MDA的开发方式提供了可行性。

3.1 现有的开发方式

Visual Studio所支持的针对EDM进行开发的流程如图3所示,经过需求分析和设计得到系统的RDM,然后使用工具将 RDM转换为 EDM。EDM作为一种关系对象映射(ORM),为上面的应用程序提供以面向对象的方式进行数据访问的API,开发人员直接对EDM进行编程,对EDM实例的操作将由EDM到RDM之间的映射规则自动更新到底层的RDM实例。

图3 现有的开发方式

运用现有的开发方式,开发人员不必关心底层数据库的访问细节,提升了软件开发的效率,但这种开发方式并没有充分发挥EDM作为“可执行的概念模型”的作用,其原因如下:

(1)EDM作为概念模型,其建模功能并没有体现出来,EDM只是作为一种ORM为应用程序提供数据访问服务,并不是一种类似于UML的可用来进行系统建模的工具。

(2)这种开发方式首先得到的是RDM,然后再通过转换得到EDM,这使系统开发之初就依赖于具体的逻辑模型。

(3)对于新出现的需求或变更,针对RDM而不是EDM进行修改,则依然需要开发人员考虑与平台相关的细节。

3.2 基于EDM的MDA开发方式

基于MDA的思想,笔者提出一种在Visual Studio中针对EDM进行开发的新方式,如图4所示。经过需求分析,直接使用EDM进行系统分析和建模。之后借助转换工具将概念模型EDM转换为平台相关模型(如RDM)。应用程序直接工作在EDM上,其对数据的操作将由转换工具映射到底层的关系数据库中。

图4 基于MDA的开发方式

EDM作为一种平台无关的概念模型,更贴近于系统的问题域,它能比RDM等平台相关模型更准确地描述系统需求。这样,软件开发人员可以站在更高的抽象层次上分析和解决问题,更多地关注于系统的业务领域[9],而不是具体的实现技术和平台。

在传统的软件开发流程中,需要在系统开发的不同时期建立不同的模型与文档,这些模型和文档是对同一问题的多次描述,会带来重复劳动。当系统结构发生变化时,手动维护这些模型与文档之间版本的同步,需要付出大量的时间。但这种基于MDA的开发方式,只需要建立EDM这一种概念模型,相应的平台相关模型和文档可借助转换工具去完成。EDM在系统开发生命周期中处于核心地位,系统开发的起点不是建立RDM或编写代码,而是设计 EDM 概念模型[10-11]。若系统结构发生变化,只需在概念模型EDM上进行修改,其他模型的更新和同步可借助相应的模型转换工具来进行。

在基于MDA的开发方式中,EDM不仅是进行概念建模的工具,而且贯穿于整个开发的始终,增强了概念模型的作用,是对MDA架构更完整的实现。这种开发方式的优点有:

(1)在系统设计之初,EDM作为一种概念建模工具进行系统设计。在系统实现阶段,EDM作为一种ORM为应用程序提供数据访问,使整个开发过程的环境得到统一。

(2)在整个开发过程中,开发人员始终面对的是EDM,不用过多地考虑底层具体的实现技术和平台,只需专注于业务逻辑的实现,EDM到OOM、RDM之间的转换可借助工具完成。这样,EDM简化了系统的开发,也增强了系统在不同平台下的可移植性。

(3)对系统结构的更改不再是针对代码,而是直接在EDM上进行,借助转换工具来维护EDM到RDM和代码之间的同步,避免由系统重构带来的混乱,减少重复劳动,提高系统的可维护性。

(4)系统设计阶段得到的EDM,可复用到相近领域,在更高的层次上增强了系统的可重用性。

4 实例

笔者以一个网上销售系统为例来演示这种基于MDA的开发流程。通过与传统的ADO.NET的数据访问方式进行对比,体现使用EDM进行开发的优势,并以一次系统重构来说明使用基于MDA的EDM开发所带来的灵活性。

在系统设计阶段,通过需求分析,获取业务流程和规则,通过对业务规则的分析,抽取出相关的核心实体。然后在Visual studio中建立EDM模型,如图5所示,抽取出4个实体:顾客、订单、订单项和商品,实体之间的关系有一对一,一对多。

图5 网上销售系统EDM模型

利用Visual Studio中提供的功能将EDM转换为SQL语句并生成RDM。在转换过程中,Visual Studio根据EDM与SQL Server数据库之间的映射规则,将EDM中的实体转换为数据库中的表,将EDM实体间的关系转换为数据库表之间的关系,并自动建立主码、外码。在数据库中生成如图6所示的RDM。

在系统的实现阶段,相对于传统的ADO.NET的数据访问方式,使用EDM之后所需的代码量将大大减少。一方面,实体框架会自动生成与EDM实体对应的实体类,该实体类的结构由实体框架自动维护,并与EDM实体保持同步,对EDM结构的更改可以立即在实体类代码中得到更新。另一方面,EDM屏蔽了底层的数据访问细节,省去了传统访问方式中连接数据库、打开连接、数据访问和关闭连接等繁琐且重复的操作。

图6 网上销售系统RDM

在实体框架中,每个EDM对应于一个对象上下文(ObjectContext),它是所有实体对象的容器,对所有实体对象的生命周期进行管理,自动记录当前正在使用的实体对象的状态,并在最后提交时将对象持久化到数据库中。ObjectContext为应用程序提供了访问实体对象的接口,因此,对数据进行的各种操作都是面向对象的,解决了阻抗不匹配的问题。

例如,下面的数据访问代码段,统计某个顾客的消费总额。只需将Customer对象作为参数输入,使用对象间的关系来进行查询和统计。之后,ObjectContext会自动将相应的操作映射到底层数据库中。

若使用传统的ADO.NET的方式来实现,则需要使用如下的SQL语句,进行三层嵌套查询,编写类似的代码,要求开发人员非常熟悉SQL语法,且在程序代码中无法对SQL语句进行语法和语义上的检测,编写起来容易出错,不便于测试,效率比较低。

如果在系统开发完成后,出现一个新的需求,如为了吸引顾客,系统对VIP贵客实行打折优惠,需要在原有顾客的基础上建立一批VIP顾客。使用基于MDA的开发方式,可直接在EDM上对概念模型进行重构。通过对新需求的分析,在原有的EDM中添加一个新的继承自Customer实体的VIPCustomer实体,如图7所示。在修改EDM后,将EDM转换为新的RDM(目前,Visual Studio还不支持EDM到RDM的自动实时更新,需要先导出为SQL然后在数据库里执行得到新的RDM)。对于EDM上原有的C#程序代码,ObjectContext会自动添加VIPCutomer实体类,这些更新不会影响原有的程序代码。在程序中可直接操作ObjectContext中的VIPCutomer对象,不必关心底层数据库的结构发生的变化。

图7 系统重构之后的网上销售系统EDM

若使用原有的开发方式,则需要在数据库里添加额外的字段或者增加一个新的表来记录VIP顾客的信息,由于RDM中不支持继承的概念,因此它没有EDM对这一需求描述得直观和清晰。更改数据库表结构需要开发人员熟悉关系数据库的操作和关系模式的设计,并且更改底层的数据库结构可能会引起上面应用程序的变化,这将增加系统重构的工作量。

5 结论

基于MDA的开发方式使软件开发的抽象级别进一步得到了提高。笔者提出了一种基于MDA的开发方式,使EDM处于系统开发的核心地位,并贯穿于整个开发周期。这样,EDM作为概念模型的作用得到了增强,能更好地支持MDA,并丰富了EDM的使用方式。

[1] Object Management Group.MDA guide version 1.0.1[DB/OL].[2011 -09 -21].http://www.omg.org/cgi-bin/doc?omg/03-06-01.pdf.

[2] ANNEKE G K,JOS W,WIM B.The model driven architecture:practice and promise[M].[S.l.]:Addison Wesley,2003:133 - 141.

[3] DAVID S F.Model driven architecture - applying MDA to enterprise computing[M].[S.l.]:Wiley Publishing Inc,2003:43 -51.

[4] Microsoft.Entity framework overview[DB/OL].[2011-09 - 21].http://msdn.microsoft.com/en - us/library/bb399567(v=VS.100).aspx.

[5] ROGER J.Professional ADO.NET 3.5 with LINQ and the entity framework[M].[S.l.]:Wiley Publishing,2009:24-29.

[6] ADYA A,BLAKELEY J A,MELNIK S.Anatomy of the ADO.NET entity framework[C]//ACM SIGMOD.[S.l.]:[s.n.],2007:877 -888.

[7] JOSE A B,MURALIDHAR S.The ADO.NET entity+framework:making the conceptual level real[C]//Lecture Notes in Computer Science 4215.[S.l.]:Springer,2006:552 - 565.

[8] SHANE S,WOJTEK K.Model transformation:the heart and soul of model- driven software development[C]//IEEE Software.[S.l.]:[s.n.],2003:42 -45.

[9] LIU Y,LIU H X.The mapping from entity data model to relational data model[C]//IEEE International Conference on InternetTechnology and Applications.[S.l.]:[s.n.],2010:1 -5.

[10] 陈雪梅,韩洁琼.C语言可视化编程环境的设计与实现[J].武汉理工大学学报:信息与管理工程版,2010,32(4):561 -564.

[11] ANDREY Y.Using ADO.NET entity framework in domain- driven design:a pattern approach[R].Sweden:Department of Applied Information Technology,2008.

猜你喜欢

开发方式概念模型开发人员
网络服装虚拟体验的概念模型及其量表开发
Semtech发布LoRa Basics 以加速物联网应用
基于“认知提升”的体系作战指挥概念模型及装备发展需求
数字海洋的开发方式选择和研究
车身开发中的尺寸工程技术之我见
缅甸水资源开发方式及应注意的问题
后悔了?教你隐藏开发人员选项
基于PSR概念模型的土地利用系统健康评价
三星SMI扩展Java论坛 开发人员可用母语