标题: MDA入门必读 -- MDA架构详细介绍
threehair
荣誉斑竹
Rank: 14Rank: 14Rank: 14Rank: 14


UID 27
精华 78
积分 3034
帖子 5716
活跃指数 0
LU金币 2093 个
LU金条 0 个
阅读权限 200
注册 2003-9-17
 
发表于 2004-3-15 18:09  资料  个人空间  短消息  加为好友 
MDA入门必读 -- MDA架构详细介绍
模型驱动架构MDA入门
             作者:田林一
http://www.mdasky.com/forum/dispbbs.asp?bo...2&ID=125&page=1

mdasky原创文章,如果要转载,请注明作者和出处
关键词:OMG、MDA、UML、MOF、XMI、CWM、PIM、PSM
缩略语清单:

缩略语 全称 含义
OMG the Object Management Group 对象管理组
MDA Model-Driven Architecture 模型驱动架构
UML Unified Modeling Language 统一建模语言
MOF meta-Object Facility 元对象设施
XMI XML metadata Interchange XML元数据交换
CWM Common Warehouse metamodel 公共仓库元模型
PIM Platform-Independed Model 平台独立模型
PSM Platform-Specific Model 特定平台模型
CIV computation independent viewpoint 计算无关的视角
PIV platform independent viewpoint 平台无关的视角
PSV platform specific viewpoint 平台相关的视角
CIM computation independent model 计算无关的模型
JMI Java metadata Interface Java元数据接口
JOLAP Java OLAP Interface Java OLAP接口
JDM Java Data Mining API Java数据挖掘API
J2C Java 2 Connector Architecture Java2连接器架构
JNDI Java Naming and Directory Interface Java命名和目录服务
meta-model meta-model 元模型





╭⌒╮ ╭⌒╮╭⌒╮
╱◥███◣╭╭ ⌒╮
︱田︱田   田|
关门,上锁,钥匙已生锈。
世事静方见,人情淡始长!
顶部
threehair
荣誉斑竹
Rank: 14Rank: 14Rank: 14Rank: 14


UID 27
精华 78
积分 3034
帖子 5716
活跃指数 0
LU金币 2093 个
LU金条 0 个
阅读权限 200
注册 2003-9-17
 
发表于 2004-3-15 18:10  资料  个人空间  短消息  加为好友 
第一章 什么是系统开发

系统开发是一个问题解决过程,其中需求可以被认为是相关领域有待解决的问题,我们捕获需求、理解所面临的问题,提出问题的解决方案并实现它。下面讲述一下软件开发的生命周期:

需求捕获:来自客户的需求定义了一个系统需要做什么,最终的结果是一个需求模型,它描述了面临的问题以及解决方案需要实现的功能。它是对系统的概念性描述,因为它只关注客户存在的问题。

分析:分析和理解需求,产生分析模型,它抽象地描述解决方案如何实现需求模型,是对系统的规约性描述,因为它同时关注问题和解决方案。

设计:决定系统如何具体实现分析模型,产生设计模型,它描述对分析模型具体的、真实的实现,它也是对系统的规约性描述。

实现:真正地实现系统,产生实现模型。它是对系统的实现性描述,因为它关注解决方案的具体实现。

测试:验证系统是否满足了原始的需求。

部署和发布:使得系统对用户可用。

此外,现在还有很多其它类型的生命周期模型和软件开发途径,例如瀑布式、迭代式开发模型,它们都需要涉及上述一些阶段活动,且都必须应对需求的变更和复杂性。

图1描述了软件开发的过程,从最初的特定领域的问题开始,经过漫长的开发过程,最终得到了运行在某种环境中的系统(解决方案)。每个阶段都以上个阶段的模型作为输入,在阶段活动中对模型加以修改和更新,并成为阶段输出。图中的需求模型代表用户需求,实现模型代表最终的解决方案。

user posted image





╭⌒╮ ╭⌒╮╭⌒╮
╱◥███◣╭╭ ⌒╮
︱田︱田   田|
关门,上锁,钥匙已生锈。
世事静方见,人情淡始长!
顶部
threehair
荣誉斑竹
Rank: 14Rank: 14Rank: 14Rank: 14


UID 27
精华 78
积分 3034
帖子 5716
活跃指数 0
LU金币 2093 个
LU金条 0 个
阅读权限 200
注册 2003-9-17
 
发表于 2004-3-15 18:10  资料  个人空间  短消息  加为好友 
第二章 MDA架构下的系统开发

MDA将软件系统的模型分离为平台无关模型PIM和特定平台模型PSM,同时又能通过转换规则将它们统一起来,以这样的方式试图去摆脱需求变更所带来的困境。平台无关模型PIM是对系统高层次的抽象,其中不包括任何与实现技术相关的信息;特定平台模型PSM是跟特定平台相关的模型。在MDA框架中,首先使用平台无关的建模语言来搭建平台无关的模型PIM,然后根据特定平台和实现语言的映射规则,将PIM转换以生成平台相关的模型PSMs,最终生成应用程序代码和测试框架。

MDA是一个开放的,中立于软件供应商的架构,它广阔地支持不同的应用领域和技术平台,能够成为应用领域和具体技术平台之间的杠杆。在MDA开发途径中,PIM代表对需求的建模,PSM代表应用具体技术后的模型,这使得MDA成为需求和技术之间的杠杆;它们各自的改变都可以是相互独立的,不会造成商业逻辑和实现技术的紧密藕合,同时MDA又可以通过转换来弥补它们之间的鸿沟,从而保护我们的投资。MDA开发途径使得我们的系统能够灵活地被实现、集成、维护和测试,系统的轻便性、互操作性和可重用性都是可以长期保持的,能够应对未来的变化。

模型驱动的开发方式关注的是对系统的建模,包括对模型的理解、设计、创建、维护和修改。图2显示了模型驱动开发途径解决问题的过程:

user posted image

一个平台(platform)是多种技术的集合,提供了各种功能接口,它是通用的、跟具体技术相关的(例如Java),特定与软件提供商的(例如微软的.Net平台)。MDA开发途径中,CIM代表软件生命周期中的需求模型,PIM代表分析模型,PSM代表设计模型,Code代表实现模型。某个特定的平台代表运行环境,系统是是一系列应用程序的集合,代表了解决方案。

图2与图1相对应,提供了如下一些看待系统的视角:
CIV:关注系统的需求和环境,对应需求捕获阶段的概念性描述。
PIV:关注系统的操作,它与任何平台无关,对应分析阶段的规约性描述。
PSV:也关注系统的操作,它基于某个特定的平台,可以从一种平台转换到另一种平台,对应设计阶段的规约性描述。

图2中还提供了如下一些模型:
CIM:从CIV视角来描述特定领域面临的问题、系统需求的模型。CIM可能包含系统的数据信息等,它代表软件生命周期中的需求模型。
PIM:从PIV视角来描述系统的平台无关操作的模型。PIM由系统的数据、处理进程等平台无关的信息组成。为了体现平台无关,PIM的目标平台必须是一个技术无关的虚拟机。虚拟机提供了许多平台无关的通用服务,例如文件服务、安全服务等,它们可以在多个特定的平台上被实现。PIM代表软件生命周期中的分析模型。
PSM:从PSV视角描述系统的平台相关操作的模型。PSM由系统的数据、处理进程等平台相关的信息组成。PSM代表软件生命周期中的设计模型。
user posted image
图3 使用标记和映射完成PIM到PSM的转换
映射(mapping)是一种规约,它包含规则以及其它一些信息,用于从PIM中生成PSMs,MDA定义了如下的一些映射:
模型类型映射(model type mapping):描述了基于模型元素类型的映射。它描述了如何将PIM中模型元素类型映射到PSM中模型元素的类型。例如,一个PIM模型元素的类型为Entity,它将会被映射到J2EE平台的实体Bean或者普通Java平台的Java类。
模型实例映射(model instance mapping):描述了增加了标记(Mark)的模型元素实例如何被转换。我们可以给PIM模型元素增加标记以指导模型转换过程,一个模型元素可以根据不同的映射增加多个标记,根据不同的映射被转换多次。例如,一个模型元素如果被增加了entity标记,这意味着它将会被映射到J2EE平台的实体Bean或者普通Java平台的Java类。
至此,我们从抽象的层面上讲述了什么是系统开发,采用MDA方式的系统开发的概貌。下面我们来对比一下传统软件开发模式和模型驱动开发途径,来发现使用MDA的原因。





╭⌒╮ ╭⌒╮╭⌒╮
╱◥███◣╭╭ ⌒╮
︱田︱田   田|
关门,上锁,钥匙已生锈。
世事静方见,人情淡始长!
顶部
threehair
荣誉斑竹
Rank: 14Rank: 14Rank: 14Rank: 14


UID 27
精华 78
积分 3034
帖子 5716
活跃指数 0
LU金币 2093 个
LU金条 0 个
阅读权限 200
注册 2003-9-17
 
发表于 2004-3-15 18:13  资料  个人空间  短消息  加为好友 
第三章 传统的软件开发模式所面临的问题
让我们重新审视一下我们的系统,并回顾一下开发此系统的艰辛的过程,我们会发现:
我们疲于应付需求的不断变更
我们的文档迅速地失效、维护困难
项目二期开发生产力无法提升。
每当一种新的技术产生的时候,我们必须做许多重复的工作。
系统永远不可能只用一种技术实现,且不跟其它系统交互。不断变更的需求同样也给我们的系统带来困难。下面我们将分析我们在软件开发过程中遇到的问题,随后会介绍MDA是如何来解决这些问题的。

1 生产力和维护性问题
当今我们的软件开发过程是以概要设计(low-level)和编码驱动的,如图所示:

user posted image
图4编码驱动软件开发过程(设计工件是文档、图)
无论我们是采用增量开发还是迭代开发,或者是传统的瀑布式开发途径,文档和相关的设计图表都是在前三个阶段中产生。我们的需求分析往往使用文本和图的方式来描述,其中的图经常采用UML图,如用例图、类图、交互图、活动图等。这一叠厚厚的纸面文件往往给人以深刻的印象,而其中的设计工件(artifacts)往往仅是纸件而已。
当编码开始的时候,前三个阶段产生的文档和相关图片就迅速失去了它们的价值。随着编码阶段的继续进行,图片和代码之间的关联逐渐减弱甚至消失,它们不再是对代码的精确描述,或多或少地成为了无关的图片。
随着时间的推移,系统不断地被修改,文档、设计图表和代码之间的距离就越来越疏远。我们仅仅是修改了代码,因为修改文档和设计图表所要花费的代价是我们无法容忍的。同时,即使我们修改了图和文档,这样的工作是否有效也值得怀疑,因为我们还会不断地修改代码?难道我们要花更多的时间去不断修改文档吗?那些接踵而至的客户需求怎么办?哪个重要?还是放弃文档比较现实吧。那我们前期还花那么长时间写详细设计干什么呢?
极限编程XP(Extreme Programming)现在迅速地流行起来,一个主要的原因就是它承认了代码是真正驱动软件开发的力量这个事实。在开发过程中,真正产出效益的阶段是编码阶段和测试阶段。
极限编程只能够解决软件开发中的部分问题 :当一个团队初始开发一个系统的时候,保存在它们大脑中的设计思想足以使它们理解这个系统。问题是当第一个版本发布之后,团队可能会解散,其它来维护这个系统的人可能是一个新人,那么它就只有代码和测试结果,这就使得系统维护极其困难。如果给你1万行代码,你会从什么地方开始,又如何去理解这个系统呢?
所以,要么我们花时间在前三个阶段,写详细设计文档和设计图表;或者我们花时间在维护阶段,来发现我们的系统是如何工作的。这些方式都是不能直接产出代码的,也是花费比较高昂的。许多开发人员认为直接书写代码才是有产出的,设计模型和文档则不能。但是,在一个程序的项目团队中,这些任务都是必须被完成的。抛弃文档写作就能提高生产力吗?文档写到什么粒度,既能很好地指导编码和测试,又能不降低生产率呢?一直是困扰开发人员的一个难题。

2 轻便性问题
软件工业与传统工业相比,有其特殊性,它的发展速度令人吃惊。每年(甚至更快),新技术就被发明并迅速流行起来,例如(Java, Linux, XML, HTML, SOAP, UML, J2EE, .NET, JSP, ASP, Flash, Web Services等等)。许多公司必须跟从这种改变,因为:
· 用户提出使用新技术的需求
· 新技术能够真正解决一些问题(例如,XML解决异构系统间的数据交换)
· 软件供应商停止对旧的技术提供支持
新技术能够使得一些公司获得一些切实的好处,但是人们必须面临的困境就是,他们必须快速跳跃前进,而且必须忍受前期投资失去价值的现实,这无疑是非常痛苦的。情况更加复杂的是,新技术本身也在发生变化。它们也会不断推出不同的版本,而且并不能保证能完全做到向后兼容。软件供应商通常也只是对最近的2到3个版本提供支持。

现存的一些系统要么提供接口与新技术开发的系统连接,要么转向新技术。那些仍然使用旧技术的遗产系统必然需要和使用新技术开发的系统进行互连。那么我们的系统如果和某种技术紧密绑定,那么注定这个系统在跟随技术发展的道路上是步履沉重的,那么如何设计我们的系统才能够使得我们的系统足够地轻便,能够跟上技术前进的步伐呢?

3 互操作性问题

软件系统很少能够孤立地存在,大多数都需要和其它系统进行通信。一个典型的例子就是,很多公司在他们的现存系统上构建了基于Web的新系统;基于HTML、ASP、JSP等的Web应用程序需要从现存的后端(back-end)系统中获取信息等等。系统往往要使用多种技术来实现,他们之间也存在互操作的问题。现在我们往往在系统中使用组件,不同的组件使用各自最佳的技术来实现,他们之间也需要互操作。

不同的工具对于元数据的管理均有自己的策略,这就给元数据的共享形成了障碍,也降低了不同软件的互操作性。如何应对这些互操作的需求呢?能否有一个统一的解决方案呢?

4 文档问题
许多的开发人员总是认为编码才是他们的主要任务,文档可用性的支持可以缓一缓。最终写文档成了强制的任务,而不是出于激励的目的,不是出于自愿的工作当然不能做好。这个是文档为什么质量总是不够高的原因之一。

能够检查文档质量的也只能是开发团队的人员,而他们自己却讨厌写文档的工作。因此这也是文档总是不能得到更新的原因。每次代码改变之后必须手工去在一堆文档中找出设计中需要更改的地方,这是多么烦琐的工作。其实开发人员的这种想法是错误的。我们的工作是开发一个容易修改和便于将来维护的系统。
在代码层次上解决这一问题的方案就是能够便利地从代码中产生文档,使得文档是代码中不可分割的一部分。这种方案被一些语言所支持,比如Eiffel和Java语言。但是这种方案只能解决概要(low-level)设计文档的问题,详细(high-level)的设计文档仍然需要手工维护。对于一个复杂的系统,在抽象层次上描述系统的详细设计文档尤为重要。如何能够保持文档和代码的同步,而又不额外增加很多工作量呢?
希望MDA能够揭开我们心中的谜团,让我们来看看MDA是如何应对这些困难的。





╭⌒╮ ╭⌒╮╭⌒╮
╱◥███◣╭╭ ⌒╮
︱田︱田   田|
关门,上锁,钥匙已生锈。
世事静方见,人情淡始长!
顶部
threehair
荣誉斑竹
Rank: 14Rank: 14Rank: 14Rank: 14


UID 27
精华 78
积分 3034
帖子 5716
活跃指数 0
LU金币 2093 个
LU金条 0 个
阅读权限 200
注册 2003-9-17
 
发表于 2004-3-15 18:15  资料  个人空间  短消息  加为好友 
第四章 模型驱动开发途径综述

对象管理组OMG介绍了基于模型的MDA技术,模型是软件开发过程中的关键,MDA软件开发过程是以系统建模作为驱动力的。MDA不同于OMA和CORBA,它是一种在软件开发中使用模型来建立系统和解决互操作性等问题的途径,而不是实现分布式系统的框架。

系统建模是软件开发史上的一次革命。事实胜于雄辩,现在所有的软件开发都有建模过程。不幸的是,很多模型仅仅在编码实现前闪现一下就稍纵即逝。仅在开发者脑中闪现,然后就消失了,对于后来的系统维护人员,简直就是“噩梦”。实际上,我们不应该有任何借口去直接开发软件而不经过仔细的设计,设计可以使得我们的系统易于开发、继承和维护。MDA将使得建模革命更加彻底,因此“将建模革命进行到底!”就成为MDA的一个响亮的口号。

MDA技术的核心概念均是OMG的一系列标准:统一建模语言UML(Unified Modeling Language)、元对象设施MOF(meta Object Facility) 、XML元数据交换XMI(XML metadata Interchange)、公共数据仓库元模型CWM(Common Warehouse metamodel)。MDA的核心标准组成了创建模式驱动的一致性系统纲要的基础,这个系统纲要完成授权、发布和管理模型的功能。

作为OMG组织的一个发展进程,MDA代表了OMG组织定义的互操作性规范的一个革命性进步。很长一段时间以来,互操作性一直基于CORBA标准和服务,不同种类的软件系统在标准的组件接口层次上实现互操作。而在MDA中,它从系统模型层次上来解决互操作性的核心问题。这条途径最有意义的方面就是系统使用平台无关的语言进行描述,使得它和具体的平台以及实现技术分离,同时可以根据各种具体平台的映射关系来生成各种实现模型,例如(Java,XML,SOAP)。

MDA另一各重要的意义就是设立了元模型的规则,元模型在规范中、建模技术中和元数据中都是主要的活跃分子。异构系统之间的互操作最终都是通过共享的元数据、全面的共享和理解元数据的策略来实现的。这些策略包括:自动化部署、发布、管理和翻译模型。AOM技术提供了基于运行时刻翻译模型的动态系统行为。基于AOM的架构可以容易地在运行时刻进行扩展,完全具有动态的行为,因此具有高的互操作性。

1 MDA开发生命周期

MDA开发模式的生命周期与传统的方式看起来区别并不大。他们都具有相同的开发阶段,主要的区别就是各个阶段的设计工件是不相同的,MDA的设计工件是正式的精确模型,它们能够被机器所理解。

user posted image
图5 模型驱动软件开发过程(设计工件是PIM、PSM)

1.1 MDA开发步骤
user posted image
图6 MDA开发步骤

1)首先我们使用平台无关模型PIM从如何以最好的方式支持商业逻辑的角度来对系统进行建模。PIM是对系统的一种高层次的抽象,与具体的实现技术无关。在此过程中,我们会不断根据客户需求和其它因素对PIM进行精化,以使得它能够更加精确地描述我们的系统。

2)然后PIM可以被转换到一个或者多个特定平台模型PSMs,对于每种特定的技术平台都会生成独立的PSM。PSM是针对你选择的实现技术、平台,对你的系统度身定做的模型。例如,EJB PSM是对使用EJB结构的系统的建模,它包含一些EJB相关的名称,例如"home interface" "entity bean" "session bean"等。关系数据库PSM包含名称如"table" "column" "foreign key" 等。由于现今的很多系统都跨越多种技术,所以对于一个PIM拥有多个PSM是很正常的。这是MDA中最复杂,也是最重要的一步。

3)有时候从PIM自动生成的PSM并不能使挑剔的程序员满意,他们会根据平台的特性对PSM加以修改,对PSM的改变也能够反映到PIM中去,这是MDA的高级特性。

4)对PSM进行不断的精化,以指导生成器生成质量更高的代码。

5)最后一步就是将每个PSM都转换到代码,由于PSM跟具体的系统实现技术已经很接近,因此这种转换来得比较直接。

1.2 MDA提升了抽象层次
PIM, PSM,和Code模型被作为软件开发生命周期中的设计工件,在传统的开发方式中是文档和图表。重要的是,它们代表了对系统不同层次的抽象,从不同的视角来看待我们的系统,将高层次的PIM转换到PSM的能力提升了抽象的层次。能够使得开发人员更加清晰地了解系统的整个架构,而不会被具体的实现技术所“污染”,同时对于复杂系统,也减少了开发人员的工作量。

2 MDA关注的问题和解决之道
2.1 MDA 提供了统一的元数据管理框架
商业利益的驱使使得软件行业的发展中经常出现各厂商之间产品不兼容的情况,这对于软件相互集成和互操作都形成了障碍,直接导致了软件成本的提高、应用及开发的复杂度。MDA旨在统一不同的商业产品和标准之间的数据交换及互操作,从而改善各厂商的软件产品之间不兼容的情况。

良好的集成性、互操作性的关键是如何智能地使用和管理元数据,这些元数据普遍存在于应用程序、平台、工具和数据库当中。MDA的一个重要贡献正在于提供了一个管理不同元数据的统一框架,元数据的管理和集成可以使用MDA的一系列标准来完成:CWM, MOF, UML和XMI。其中最重要的是MOF,它是MDA的核心部分。和以往进行数据格式统一管理的思路不同,MDA 允许使用不同格式(不同元数据描述)的数据同时存在,并为描述这些数据的语言提供了统一的定义语言,即MOF。下面我们来看看MDA的各个标准在统一元数据方面所起的作用:

2.1.1 CWM
CWM是用来对数据仓库(包括关系型、非关系型、多层系统等)中的元数据进行建模的规范,它为数据仓库、数据挖掘领域内的元数据定义了对应的元模型,它同时也是多层系统、异构系统间元数据实例交换的基础。理解CWM元模型的系统可以使用与其元模型对应的格式进行元数据的交换。CWM包含一系列的元模型,它们分别代表data resources、analysis、warehouse management和典型的数据仓库/数据挖掘环境中的功能组件。Data resource元模型支持对遗产(legacy)和非遗产(non-legacy)的数据源的建模,包括关系型数据库、面向记录(record-oriented)的数据库、基于XML和基于对象的数据源。analysis层定义了data transformations、OLAP、information visualization/reporting、business nomenclature和数据挖掘(data mining)。仓库管理层(warehouse management)定义了标准的warehouse processes、activity tracking和scheduling。foundation元模型支持不同的通用元素和服务,例如数据类型(data types)、类型系统映射(type system mappings) 、抽象关键字和索引(abstract keys and indexes)、表达式(expressions),商业信息(business information)和基于组件的部署(component-based software deployment)。

每种产品表示元数据的方式不尽相同,它们都有自己的内部格式,因此它们之间元数据的共享就必然存在障碍。现在我们可以使用CWM来解决这一问题,CWM代表了基于模型的在软件系统间交换元数据的一种新途径。在多种产品间共享的元数据将会使用数据模型来表示,而这些数据模型则使用CWM元模型来精确描述。某种产品将自己的元数据(使用内部格式表示)导出为使用CWM描述的元数据,另一种产品将其导入,构造出CWM兼容的模型并映射到自己的内部格式,这样就达到了元数据共享的目的。现在CWM提供的元模型集合已经足以用来对整个数据仓库领域进行建模。使用支持CWM的工具,我们可以从数据仓库模型中直接创建数据仓库实例。不同的工具组件将会处理模型的不同部分,比如,关系数据库服务器将会处理模型中的关系型部分以创建它的分类(catalog);OLAP服务器将会在模型中搜索OLAP元数据,用它来定义它的多层模式(multidimensional schema);ETL(extract-transform-load)工具处理的部分可能会跨越多个CWM元模型,例如关系型、OLAP、transformation、data type、type mapping和expression元模型。CWM模型主要是用来定义高度通用的、用于外部表示和共享元数据的模型。对于那些不适合CWM格式的元数据(例如,和工具高度耦合的元数据),可以通过CWM的扩展机制来处理它,也可以通过扩展核心的CWM元模型来处理它,或者通过其它工具相关的方法来处理。

2.1.2 UML

UML是定义CWM的符号基础(不光是CWM,这里只谈论UML对于统一元数据所做的努力),但是CWM同时也扩展了核心的UML元模型的子集来支持数据仓库等。使用CWM来构建数据仓库模型的时候,可视化的建模工具是我们的首选。一方面包含复杂的元数据结构的可视化模型对于人来说,易于管理和理解。另一方面,由于UML语言被精确地定义(通过UML元模型),可视化的UML模型能够被自动地转换到其它格式。这就给交换与平台、工具无关的CWM模型,以及从CWM模型中构造工具相关的元数据都带来了便利性。

2.1.3 MOF

不同的功能需要不同的建模结构集:关系数据建模所需的建模结构包括表、列、键等等。工作流建模所需的建模结构集包括活动、执行者、变化、分割、连接等等。UML类建模所需的建模结构集包括类、属性、操作、关联等等。定义CORBA接口的建模结构集包括接口、值类型等等。

所以,为了描述某一特定类型的模型,我们必须描述组成该类模型的建模结构集。能有一种一致的方法来描述语言结构是非常有用的。业界正在使用全然不同的方法来描述不同类型建模结构的本质。MOF放弃了把这些不同的建模结构集都合并成一个集合的想法,因为这意味着把所有语言合并为一种,而采用统一方式来描述组成某类模型的建模结构属性以及建模结构间的关系。

MOF被用来描述关系数据模型的建模结构,也被用来描述UML类模型的建模结构;它还被用来描述其他种类的建模所用到的结构。MOF是通用的、抽象的,用于定义元模型的语言,它可以被称为metametamodel或者定义元模型的模型。MOF天生就是面向对象的,它定义了基本的元素、语法、元模型的结构。MOF可以作为定义CWM和UML元模型的更通用的模型。

MOF标准提供了:

· 抽象模型:定义MOF对象和他们之间的关联
· 规则的集合:将基于MOF的元模型映射到语言无关的接口(使用CORBA IDL来定义)。对这些接口的实现可以被用来访问和修改任何基于这个元模型的模型。
· 定义元模型元素的生命周期、复合、和关闭语义的规则。
· 层级的反射接口(reflective interfaces):定义了通用的操作,用于发现(discover)和操纵基于MOF元模型的模型,但是对于映射后的接口的属主是未知的。
MOF的强大在于它使得不同的元模型可以互操作,能够理解MOF的应用程序可以在不了解特定领域模型实例接口的情况下,仍然能够使用反射接口提供的通用操作来读取和更新模型。MOF语义还定义了元数据仓库服务(metadata repository services),它支持模型构建(construction)、发现(discovery)、移动(traversal)、更新(update)。前提条件是此模型必须是可被理解的某种元模型的实例。MOF支持模型生命周期语义,意味着MOF的实现提供了一种有效的元数据授权和分发工具。例如,新开发的元模型可以保存在MOF仓库中,根据MOF生命周期语义和复合语义(继承inheritance、集群clustering、嵌套nesting等),它能够和现存的元模型组合。随后,模型接口和默认的实现可以被生成,并对环境可用。模式实现可以通过手工或者工具来附加其它编程逻辑被增强(例如使用OCL约束)。一个完全兼容MOF的仓库可以提供众多的元数据服务,比如持久性(persistence)、版本(versioning)和目录服务(directory services)等。

下面的表和图列出了MOF包含的4个元层次以及其作用:

元 层 次 描 述 元 素
M3 MOF,即定义元模型的构造集合 MOF类、MOF属性、MOF关联等
M2 元模型,由MOF构造的实例组成 UML类、UML属性、UML状态、UML活动等;CWM表、CWM列等
M1 模型,由M2元模型构造的实例组成 “Customer”类、“Account”类;“Employee”表、“Vendor”表等
M0 对象和数据,也即M1模型构造的实例 客户Jane Smith、客户Joe Jones、账户2989、账户2344、员工A3949 、商家78988等

user posted image
图7 MOF的元层次

M3层是元层次的尽头,层次止于此,因为M3层MOF元素是M3层MOF元素的实例。换句话说,MOF用MOF来描述本身,也就是说MOF是自描述的。MOF为其自身结构定义了一个遵守MOF的模型。该模型常被称为MOF自身模型。MOF自身模型同其余任意MOF元模型均有细微差别:它是MOF的MOF元模型。

2.1.4 XMI

XMI将MOF映射到W3C的XML语言上。XMI定义了XML标记(tags)如何表示序列化的兼容MOF的模型。基于MOF的元模型被转换为DTDs或者XML Schema,模型根据其对应的DTD或者XML Schema被转换为XML文档。以前基于标记的语言在表示对象和对象的关联上存在许多的困难,而这在XMI中得到了解决。此外,XMI基于XML的特性,意味着元数据(用tags表示)和其实例(元素内容)可以共存于同一个文档中,这使得应用程序可以容易地通过其元数据来理解实例。XMI同时具有自描述和天生的同步特性,这就是为什么基于XMI的交换在分布式的、异构环境中是如此重要的原因。

2.2 MDA使得模型变为可执行
MDA开发途径看起来和传统的开发方法很类似,但是这里有一个至关重要的不同,就是模型在MDA中是可执行的,是能够产生产出的。传统意义上,从模型到模型,从模型到代码的转换主要是手工完成的。虽然有些工具可以从模型中产生部分代码,但是它们一般都是通过指定的模板来生成,有很大的局限性,大多数的工作仍然需要手工来完成。

与之形成鲜明对照的是MDA中的转换通常都是通过工具来完成的。许多工具能够将PSM转换成代码。事实上,PSM已经和代码非常接近,这种转换其实没什么稀奇的。对于MDA来说,其重要的改变就是它将从PIM到PSM的转换也自动化了,它是MDA给我们带来的最大的惊喜。想想以前,从详细设计中创建数据库模型要花费我们多少工作?从相同的设计中创建COM组件或者EJB组件要花我们多少时间?现在使用MDA我们可以自动化这一过程。

user posted image
由于MDA是一种新的框架,现在的工具无法百分之百完成从PIM到PSM,从PSM到代码的转换。开发人员需要手工来完善转换后的PSM或者Code模型,不过现在的工具已经可以从PIM最终产生具备基本功能的可运行的应用程序。这样开发人员可以迅速地验证系统的基本功能,从而进一步优化PIM。

为什么说MDA中的模型是可执行的?因为MDA中的模型的级别处于精确模型级(关于模型级别的讨论请见www.mdasky.com论坛中xiterator的文章《读书报告:建模成熟度级别》)。

精确模型级的模型具有足够的精确度,可与实际代码直接连接(语义距离更小),但模型仍保持高级别的抽象性,而不是编程语言概念的直接表示。该级别的特征是:

· 编码者不再作出任何商业决定。
· 模型与代码的互更新功能成为关注焦点(相对于工具开发商而言),且更容易使用。
· 模型到代码的直接转换(自动化和可定制)方便了迭代和增量的开发。

这里我们可以看出,事实上建模语言在MDA中已经成为了一种编程语言而不仅仅是设计语言,模型所发挥的作用更大了,能够从模型中生成代码,也使得我们对建模的投资获得了更大的回报。

模型转换的内容非常多,限于篇幅,这里不详细介绍,如果大家感兴趣,可以阅读我的《MDA中模型转换的途径》一文


3 Java平台标准在MDA上的努力

采用Java平台来实现这些MDA标准,这是一个明智的实现策略,由于J2EE平台通过提供的公共平台服务和编程模型(接口或者APIs)使得应用程序的开发和集成具有很大的便利性。J2EE正成为实现和发布基于组件的(component-based)、多层系统下的(multi-tiered system)、以Web环境为中心的(Web-centric environments)分布式应用的工业标准的领导者。

Java服务和APIs由JCP(Java Community Process)来开发,JCP目前正在开发将MDA标准映射到Java技术模型中的相关标准,这包括JMI(Java metadata Interface)、JOLAP(Java OLAP Interface)和JDM(Java Data Mining API)。这些都是实现MDA规范的纯Java编程模型,此模型使用J2EE标准APIs的形式,用于将来增强分布式应用程序之间的基于元数据的互操作性。这些即将到来的APIs将为新一代基于模式驱动软件架构的系统提供一个初始的框架。

他们的努力代表了对MDA的自然扩展和延续。事实上,现今明显的趋势J2EE规范中增强了对MOF和CWM元模型的实现。这种趋势是非常重要的,因为它意味着对一致的编程模型、元数据服务、和开放平台的互操作能力的需求是被公认的。

3.1 JMI
Java元数据接口(JMI)提供了将MOF映射到Java语言的正式的映射规则。JMI实现允许生成纯Java接口,以对仓库中的MOF元模型和其实例进行访问。这意味着对MOF元数据服务的Java实现来说,可以提供通用的接口,也可以提供源自MOF接口映射规则的特定元模型的接口,Java客户端可以轻便地通过JMI来访问元数据服务。JMI的开发目前由Unisys领头,参与者包括Sun Microsystems、Hyperion、IBM、Oracle和其它一些行业领导者。

3.2 JOLAP

Java OLAP接口(JOLAP)是为部署在J2EE环境中的OLAP服务器和其应用程序开发纯Java API所做的努力。JOLAP的开发由Hyperion Solutions Corporation领头,参与者包括IBM、Oracle、Unisys、Sun Microsystems和其它一些行业领导者。

在J2EE环境中,JOLAP通常作为OLAP服务器或者其它多维数据库系统的客户端API。JOLAP使用CWM OLAP元模型来描述OLAP元数据,这保证了兼容JOLAP的资源具有完备的互操作性,并能够通过CWM来进行交换。JOLAP同时也定义了查询接口,以支持编写和执行OLAP查询、管理和操纵多维的结果集。JOLAP将会在多个现存的和即将到来的J2EE APIs间起到杠杆作用,包括:

· J2C(Java 2 Connector Architecture):用于连接管理层、数据层资源、事务管理。
· JMI(Java metadata Interface):高级元数据功能
· JNDI(Java Naming and Directory Interface):命名和目录服务,提供single sign-on、认证和鉴权的Java安全模型。

3.3 JDM
Java数据挖掘API(JDM)提供了商业智能应用中数据挖掘技术的纯Java API。JDM和JOLAP类似,它也是对CWM元模型的具体化。JDM的开发由Oracle领导,参与者包括Hyperion、IBM、Sun Microsystems等。

4 众多标准间的关系和在MDA中扮演的角色

4.1 众多标准间的关系

下图说明了MDA中各个标准与对应的J2EE平台标准之间的关系。需要注意的是,对于JOLAP和JDM,对应MDA部分它们主要关注的是元数据管理接口。它们都为数据和查询管理定义了额外的接口,这些都不包含在CWM和MOF中。
user posted image
图9 MDA中各个标准与对应的J2EE平台标准之间的关系

4.2标准和规约在MDA中扮演的角色

4.2.1 UML在MDA中扮演的角色

UML是使能MDA技术的一把钥匙:使用MDA技术创建的所有应用程序都基于标准化的、平台独立的UML模型。通过将这一通用的、被普遍接受的建模标准作为杠杆,MDA使得开发人员可以创建能被轻便地访问、天生具有良好的互操作性的应用程序。

在MDA中使用UML的方式可以有两种:

1、开发人员使用UML来对系统进行建模,产生PIM。使用UML建立的模型必须具有一致性和精确性,能够被MDA工具理解并能够被转换成模型和代码。

2、软件架构师需要定义用于指导模型转换的规则。他们不开发某个特定系统的模型,而是创建将一种模型转换到另一种模型的规则,这种规则是可以作用于任何模型和不同的系统的。软件架构师必须对UML语言的原理和使用有深刻的了解,同时还必须熟悉UML元模型,因为元模型是用来定义转换规则的重要元素。

4.2.2 MOF在MDA中扮演的角色

通过使用建模语言中的MOF结构定义(位于M2层的元模型),我们可以定义在建模语言之间的转换规则。由于转换规则使用建模语言的元模型来创建,它们可以被应用到任何模型(位于M1层)中去。如果没有一个标准的语言来描述元模型,那么转换规则就无法创建,那么MDA开发途径的前景将会举步维艰,难以实现。因此,MOF是MDA中的一个核心标准。

4.2.3 OCL在MDA中扮演的角色

为了使源模型(PIM)和语言定义更加精确,OCL可以被有效地用来协助创建转换规则。转换规则将源模型中的模型元素映射到目标模型中的模型元素,OCL query描述了源模型中的模型元素,OCL expression则描述了目标模型中的模型元素。

许多转换规则必须在一定的条件下才能执行,这些条件可以使用OCL来描述。转换规则中使用的所有OCL expressions被应用在源和目标语言的元模型上。先验条件和后验条件

4.2.4 Profiles在MDA中扮演的角色
profile定义了一个特定的元模型,是UML元模型的子集。事实上,profile通过重用UML元模型定义了一种新的建模语言。

在使用的profiles定义了跟特定平台相关的建模语言,比如CORBA、Java和C++ profiles。使用这些profile的模型只能被作为PSM。

4.2.5中间件平台在MDA中扮演的角色
在MDA中,一个规范的PIM被用来定义一个或者多个PSM和接口定义集合。每种定义描述了基础模型在不同的中间件平台上是如何实现的。由于PIM、PSMs和接口定义集合都将被作为MDA规范的一部分,OMG将采用多种中间件平台的规范。CORBA技术具有平台和语言的独立性、经过检验的事务和安全的天性。这使得它仍然是从嵌入式系统到桌面系统,再到Internet应用的最佳选择。MDA的方向是使得它与其他中间件平台更容易交互,而且更加廉价。





╭⌒╮ ╭⌒╮╭⌒╮
╱◥███◣╭╭ ⌒╮
︱田︱田   田|
关门,上锁,钥匙已生锈。
世事静方见,人情淡始长!
顶部
threehair
荣誉斑竹
Rank: 14Rank: 14Rank: 14Rank: 14


UID 27
精华 78
积分 3034
帖子 5716
活跃指数 0
LU金币 2093 个
LU金条 0 个
阅读权限 200
注册 2003-9-17
 
发表于 2004-3-15 18:30  资料  个人空间  短消息  加为好友 
第五章 MDA的好处

3.1 生产率

MDA将开发人员的注意力转移到开发PIM上,虽然很多时候仍然需要做很多复杂的工作定义额外的信息来指导模型的转换。但是这种工作只需要做一次,并能应用到不同的技术平台上。虽然定义转换规则的工作量是比较大的,但是它仅仅由高水平的软件架构师来完成,一旦创建完成,就可以分发到项目组中使用,主要的开发人员只需要将注意力放在开发PIM上面。由于它们创建PIM的过程与具体的平台无关,它们可以免于陷入具体的实现细节当中。这些实现细节可以在从PIM到PSM模型转换的过程中被自动加入。

这就从两方面提高了生产率:

一方面,最好的实践表明模型技术将系统分离成不同的模块,这种分离是MDA的基础,简化了每个系统模块,使得他们易于创建、开发、重用和维护。PIM开发人员由于不需要设计和撰写平台相关的细节,减少了工作量。在PSM和Code层面,开发人员仅需要编写少量的代码,因为大部分的框架代码都已经从PIM中自动生成了。

另一方面,从模型中自动生产高质量的、完全的实现代码,将使得开发者解放出来,他们可以花更多的时间去解决商业逻辑的问题,这样可以使得系统更加符合客户需求,在更短的时间内完成更多的功能性需求的分析和设计。

能够带来这种效率提升的前提是我们拥有一个能够完全实现从PIM到PSM自动化转换的工具。这就暗示着我们的系统大部分信息都必须融入到PIM当中,并能够被工具所理解。由于详细设计不再仅仅是纸张,而是能够直接产生代码的驱动力,所以就要求PIM必须完整、准确,对系统建模的要求比传统的开发方式要高很多。

3.2 轻便性

MDA关注的是平台无关的模型,而它天生就具有轻便的特点。对于多种流行的平台,很多工具将会支持从PIM到此平台的PSM的转换。对于那些不是很流行的平台,开发人员可以选择支持插入功能的工具,将为这种平台定义的转换规则嵌入到工具中使用。

对于将来可能产生的新的技术和平台,软件工业将会分发相应的转换规则。这能够使得我们迅速地将PIM使用新的技术实现,并发布到新的平台中。

3.3 互操作性

PIM中生成的多个PSM之间可能存在一定的关系,在MDA中,它们被称为桥接器(bridges)。由于PSM针对一个特定的目标平台,所以它们相互之间不能够直接通信。无论如何,我们需要将一个平台的概念转换到另一个平台的相关概念,这就是我们常说的互操作性。MDA解决这一问题的方法是,不光从PIM生成PSM,还生成连接PSM的桥接器。

假设我们从PIM中生成两种目标平台的PSM,我们所需要的弥补两个PSM之间鸿沟的桥接器接信息都是可得的。对于一个PSM中的每个元素都是从PIM中的元素转换得到的;对于PIM中的每一个元素都会转换到2个PSM中的对应元素。因此我们可以推断一个PSM中的元素和另一PSM中的元素是有关系的。同时我们也知道两个平台的技术细节,因此我们就掌握了为PSM之间生成桥接器的所有有用信息。

举例,一个PSM是Java平台模型,另一个PSM是关系数据库模型。对于PIM中的一个元素Customer,转换到Java平台模型中是Java Class;转换到关系数据库模型中是一张表。创建Java对象和数据库表之间的桥接器接是非常容易的。为了从数据库中获得数据,我们查询Customer表,实例化Java对象并保存数据到对象中;为了保存对象,我们从Java对象中获得数据并保存到Customer数据库表中。

我们可以通过使用工具产生PSM以及它们之间的桥接器来实现跨平台的互操作性。你可以通过投资PIM的方式来将你从繁杂的技术细节变更中“拯救”出来。

3.4 可维护性和文档问题

在MDA中,模型是对代码的最佳诠释,PIM完全可以当做设计文档来对待。与传统的文档相比,一个很大的不同就是当完成PIM的创建之后,PIM不会象传统的文档那样被“抛弃”。对系统的改变首先是要更改PIM,再从PIM重新生成PSM和代码。根据代码更新设计文档的工作是单调乏味和耗时的。然而,使用MDA模型,代码和文档总是保持同步。由于代码由模型生成,你可以知道模型和代码总是保持同步状态,系统新的开发者可以迅速接手,因为他们拥有一个可读性高的系统结构图。这些特性对于维护人员来说都是一种福音,都可以显著降低维护成本。

3.5 软件质量问题

在开发过程中,如果发现了一个错误,修补它的花费越多,那么交付日期就越推后。基本的PIM可以减少系统复杂性,提高系统质量。模型帮助我们在团队成员之间提高沟通效率,减少错误。自动生成代码可以减少我们手写代码“误敲”带来的缺陷。MDA模型测试工具能帮助开发者在编码之前自动化测试他们的应用程序――模型级别。需要说明的是,设计缺陷和应用程序逻辑错误此时无法被发现。

通过MDA开发应用程序,由模型自动化生成和转换代码技术,尽责的PIM定义,减少低端的代码编写,不牺牲灵活性、可控制前提下的质量保证体系。我们都知道,较少的手写代码和早期的bug发现可以提高按时完成一个高质量系统的可能性,减少了质量保证花费,从而使预算可控。

代码生成器根据经过实践考验的设计模式来生成代码。由于模型和模式框定了你的应用程序框架和实现,可以确保你的产品的各个模块都是同等质量的代码,开发人员水平参差不齐的问题也在一定程度上避免了。

3.6充分地延长系统的生命周期

需求变更或者修改功能时可以迅速反映:将PIM和PSM分离使得需要更改实现技术时作出快速反映,因为不需要更改PIM。当平台相关的系统被维护时,原有架构可能满足不了新需求。这时,很多公司的做法不是重新设计架构,而是给系统应用补丁,这会造成架构变得脆弱。使用MDA,功能和架构被单独定义,当新的热门技术出现时,我们可以使用现有的设计来产生新的实现,这在很大程度上延长了系统的生命周期。

同时MDA在对系统互操作性上的努力,也能够使得遗产系统起死回生。对系统做一些改变,自动化产生data integration bridges和connection来和新的系统进行集成,这也延长了系统的生命周期。

3.7测试和仿真

由于模型可以用来生成代码,他们同样也可以被用来根据需求进行验证、根据组织结构来测试,还可以直接用来仿真系统行为。

第二章 结论

事实上,MDA是软件开发史上的又一次革命,魔幻般地由模型自动化软件开发事实上是另一种级别的编译技术。虽然MDA确实具有许多的优点,这也足以使他令人瞩目,但是我们也没有必要将它神话。它还处于“社会注意初级阶段”,需要完善和明确的内容还有许多。Martin Flower就对MDA持怀疑态度,他指出PIM这个概念太模糊,PIM的提出没有其存在的基础。它提了一个问题:“什么是平台?”,对于Java这种平台相关的技术来说,硬件和操作系统是其平台;我们可以在Windows上使用Java开发应用程序,拿到Unix下也能用,这是我们想象的平台无关。但是MDA是将你的编程环境当做是平台,但是我们在做的却是在交换与硬件/操作系统无关的“平台无关”程序,这就造成了矛盾。当然MDA还有其他很多问题,如MDA中从PIM转换到PSM的转化还没有标准化,MOF和UML发展不协调,CWM元模型比较难以在PIM中实现以及MDA中的很多细节还没有标准化,这些都将在一定程度上影响MDA的发展。

2004年OMG将会对上面所描述的一些缺点进行进一步的完善和澄清,2004年会是MDA大发展的一年,MDA架构将带领工业朝着可互操作、可用、轻便的软件组件、基于标准的数据模型等方向发展,让我们拭目以待。。。

参考资料:

[1]《Model-Driven Architecture: Vision, Standards And Emerging Technologies》
Position Paper Submitted to ECOOP 2001
Workshop on metamodeling and Adaptive Object Models
[2]《MDA Explained: The Model Driven Architecture™: Practice and Promise》
Wim Bast
[3]《应用MDA》David S.Frankel著/鲍志云译
[4] Understanding the Model Driven Architecture (MDA)
Sinan Si Alhir, salhi r@ earthlink.net





╭⌒╮ ╭⌒╮╭⌒╮
╱◥███◣╭╭ ⌒╮
︱田︱田   田|
关门,上锁,钥匙已生锈。
世事静方见,人情淡始长!
顶部
[广告] 记录自己的思想火花,留住每日的技术积累,尽在拥有属于自己独立域名的博客。
 



当前时区 GMT+8, 现在时间是 2008-12-6 01:57
乐悠LoveUnix论坛-京ICP备05005823号

Thanks to Discuz!  © 2001-2007    Power by LoveUnix.net
Processed in 0.072402 second(s), 6 queries , Gzip enabled

清除 Cookies - 联系我们 - 乐悠LoveUnix - Archiver