首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 开源 FAQ 第二书店 博文视点 程序员
频道: 研发 数据库 中间件 信息化 视频 .NET Java 游戏 移动 服务: 人才 外包 培训
    图书品种:235680
       
热门搜索: ASP.NET Ajax Spring Hibernate Java

MDA(Model Driven Architecture)是由OMG定义的一个软件开发框架。它是一种基于UML以及其他工业标准的框架,支持软件设计和模型的可视化、存储和交换。MDA能够创建出机器可读和高度抽象的模型,这些模型独立于实现技术,以标准化的方式储存。MDA提供了一种途径来规范化一个平台独立的系统,为系统选择一个特定的实现平台,并且把系统规范转换到特定的实现平台。本章将对MDA的主要概念做一下介绍,然后开发一个体现MDA思想的元数据引擎。

7.1  MDA 概 述

随着信息技术的发展,一大批信息系统,如客户关系管理系统、自动办公系统、资金管理系统等被开发出来,对提高管理效率起到了重要的作用。但是在这些系统的开发和后续的扩展过程中存在很多长期无法解决的难题,最突出的问题就是设计与实现不一致。

大多数的信息系统没有分离的定义模型。软件开发虽然有建模过程,但是很多模型仅仅仅在开发者脑中闪现,然后就消失了。开发人员经常使用单独代码的方法,依靠他们编写的代码表示他们正在建立的系统模型。他们所做的任何“建模”都是以嵌入在代码中的编程的抽象形式进行的,这些方式是通过程序库和对象层次的机制进行管理的,系统的可重用性差。

随着软件工程学的发展,越来越多的系统在开发的时候开始注意开发前的系统建模过程,而且开发人员会按着最初的设计模型进行开发。软件的需求是一直在变的,客户会源源不断地要求提供各种新的功能,开发人员对付这些新需求的手段就是修改代码。随着时间的推移,系统不断地被修改,设计模型和代码之间的距离就越来越远。修改设计模型并不会对系统有任何影响,直接修改代码就可以达到目的,所以很少有人去做设计模型与代码的同步工作。即使我们修改了设计模型,这样的工作是否有效也值得怀疑,因为我们还会不断地修改代码,难道我们要花更多的时间去不断修改设计模型吗?算了吧,设计模型不改也罢,有代码就行了。

当开发团队发生人事变动的时候,来维护这个系统的人可能是一个新人,那么他面对的就只有一堆已经过时的设计文档和天书一般的代码,这使得系统维护极其困难。

在很多团队中,详细设计是由经验丰富的开发人员完成的,他们会根据客户的需求设计出有哪些实体对象、实体对象有哪些字段、字段的类型是什么、实体对象之间的关系是什么、实体对象对应的数据库表是什么等。开发人员拿到这个设计文档以后开始按着设计文档一步步机械地实现:设计文档说有Employee这个对象代表员工,因此我就在数据库中创建一个员工表T_Employee,建立一个EmployeeInfo JavaBean,并创建EmployeeInfo.hbm.xml配置文件;设计文档说Employee有一个类型为int、名称为age的字段代表年龄,因此我就在T_Employee表中增加一个名称为FAge的int类型字段,在EmployeeInfo 中增加age属性,并在EmployeeInfo.hbm.xml中加上age属性的映射配置……,最后还要同样机械地创建“员工”的管理界面。开发人员心里一定在抱怨:我真的是软件蓝领呀,只能做这些机械的工作!既然设计人员已经设计出来了这些模型,为什么不能把模型直接转换为数据库表、JavaBean、配置文件、维护界面呢?

为了解决这个机械性地将设计文档转化成代码的重复性劳动问题,出现了很多代码生成器。代码生成器分为两类:

l   无源的代码生成器。这些生成器一般提供了一些向导,只要在它的向导页中设置相应的参数,比如实体对象的名字是什么、有哪些字段、生成的ORM目标产品是什么,填写完毕以后就可以生成需要的代码了。这类代码生成器的优点是非常简便,使用之前无须做准备工作。缺点是过程数据无法重复利用,如果想增加一个字段的话,就必须重复上次的工作,一个字段一个字段地重新添加,如果改动不大的话大部分开发人员都是直接去修改生成的代码。这样的生成器仅仅是一个一次性用品。

l   有源的代码生成器。这些代码生成器能够利用现有的一些信息来加速代码生成的过程。比如HibernateTools、Middlegen就可以根据现有数据库表来生成代码和配置文件,Rose可以根据UML图生成Java代码。这类代码生成器能够重复利用原有的工作成果,缺点是指导思想不明确,仅仅是一个代码生成器而已。比如HibernateTool暗示开发人员要先建立数据库表,这其实是一种数据驱动的开发模式,使得开发人员先要去思考数据是如何存储的、有哪些字段,而不是先思考系统对象之间的关系是怎么样的。这类代码生成器的“源”具有随意性,可以是一张数据库表、可以是代码中的JavaDoc,“源”只是为代码生成存在的,代码生成以后就没有了任何作用。

OMG 在 2001 年7月发布了模型驱动体系结构(Model-Driven Architecture,MDA),确定了以模型驱动体系结构代替对象管理体系结构(OMA)作为对象管理联盟未来的发展方向。

MDA通过使用软件工程方法和工具,为分析、理解、设计、实现、维护、发展以及集成原有信息系统提供了方法。在MDA中,模型不再仅仅是描述系统和辅助沟通的工具,而是软件开发的核心和主要媒介。MDA采用标准模型表述方法和标准建模方法来详细描述信息系统,从业务需求描述、系统功能和体系结构设计、包含平台技术细节的系统实现等3 个层次,MDA 都给出了相应的描述模型。

(1) 计算无关模型(Computation Independent Model,CIM),在系统需求分析阶段从纯业务角度描述系统要完成的工作。

(2) 平台无关模型(Platform Independent Model,PIM),从功能设计角度描述系统的体系结构,与技术细节无关。

(3) 平台特定模型(Platform Specific Model,PSM),描述基于特定平台的解决方案。

(4) 实现相关模型(Implementation Specific Model,ISM),面向最后的编程描述系统的实现细节。

MDA是一种用于构建系统应用架构的新方法,它的最大特点是通过定义一种与具体实现技术或平台无关的应用系统规范,将系统的功能描述与基于具体平台的实现描述分离开来。建模和模型映射技术是MDA的核心,对系统的不同方面进行不同抽象水平的建模,模型之间通过模型映射机制实现模型映射,保证了模型的可追溯性。

运用MDA开发系统,开发人员可以获得最大限度的灵活性。当底层基础设施随时间发生变化或系统功能需要扩展时,开发人员能够从稳定的、平台独立的模型重新生成代码,而不必重新构建系统。模型的一些信息可以通过运行时取得,这样使得模型在系统开发中发挥了更大的作用。

MDA解决的是从需求收集到系统设计、从详细设计到系统开发、从产品测试到产品实施等产品全生命周期的问题。本书无法去探讨MDA在整个生命周期中发挥的作用,案例中最能体现MDA思想的就是元数据机制。

查看所有评论(0)条】

最近评论



正在载入评论列表...
热点评论