模型驱动的体系结构(MDA)是具有几种不同含义的术语。当提到MDA时,表示涉及MDSD的OMG的标准化初始阶段。因为MDA没有覆盖整个MDSD领域,也可以将其认为是特殊风格的MDSD。
MDA时OMG建立的初期标准。传统上,OMG是用于中间件和工具制造商的平台,服务于它们的活动领域的同步化和标准化。CORBA(公共对象请求代理程序体系结构)和IDL、UML、MOF以及XMI时这个过程流行的结果。MDA是OMG的新旗舰。
根据OMG的指示,MDA的两种基本动机是软件平台的互操作性和可移植性--开发CORBA的相同动机。此外,OMG假定,系统功能规范应该独立于它的功能在任何给定平台上的实现。根据这种观点,MDA努力实现提供指导原则和标准的目标,这些指导原则和标准将导致以模型的形式各自构造规范。
MDA的核心构件。这些构件是UML2.0、MOF(Meta Object Facility,元对象设施)、XMI(XML Metadata Interchange,元数据交换)、3种类型的模型(PIM/PSM/PDM)、多阶段的转换、Action Language(作用语言)、各种核心模型、模型标识以及可执行的UML。
从MDA的观点来看,UML是中心,因为许多工具是基于UML和配置文件的。为了确保这将实际起作用,OMG最近已经对UML2.0的环境进行了一些改进。
元对象设施(MOF)组成了MDA的核心。它描述了符合MDA的工具应该基于的元元模型--或者应该基于的元元模型。自定义DSL或元模型的定义应该使用MOF的机制,或者通过配置文件扩展UML,这有效地组成了轻量的元模型扩展。通过MOF定义UML。MOF自身使用UML的具体语法,这可能会造成混淆。隐式地使用MOF的机制。当扩展UML元模型时,自动使用MOF。
MOF不仅在作为元模型的正式基础方面非常重要,它在作为MDA工具结构的具体相关性方面也非常重要,这些工具包括存储库、建模工具、代码生成器等。一般的工具需要一个牢固的基础:这可以只是元元模型。
XMI表示XML元数据交换,并且是MOF的XML樱色--不只是UML的DTD/模式,因为通常不会正确地声明它。当前,XMI是不同MDA工具之间互操作性的基础,因为MOF存储库还没有被广泛使用。
OMG有MDA应该表示什么的具体概念。
从PIM中可以通过模型转换程序创建平台特有的模型(PSM)。顾名思义,PSM是J2EE、.NET或其他实现平台所平台特有的。
这种讨论强调PIM和PSM都是相对的概念。PSM可能是J2EE特有的,但仍然与特定的应用程序服务器无关。因此,它形成了关于具体应用程序服务器平台的PIM。
MDA中存在更为重要的模型类型,平台描述模型(Platform Description Model,PDM)。这是目标平台的元模型。
大多数情况下都是直接通过(PIM)模型生成某种平台的源代码。这样做主要是出于实用的原因:还不存在以适合每天使用的方式支持大型系统多个阶段转换的模型转换工具。
当前无法通过UML设计完整软件系统的模型。这种情况确实存在。只要充分地限制域,彻底标准化它的概念,并且定义合适的DSL,可以在很大程度上设计域的墨西哥,当然,许多方面将仍然是未解决的或不可行的,特别是,仍然没有指定算法行为的方法。
动作语义包含如下元素:
为了能够尽可能从MDA中获益,必须标准化尽可能多的方面。这包括平台--已经通过J2EE、.NET、CORBA或Web service完成,至少是在技术层面上--以及转换语言,它们在QVT的环境中产生。为了允许用户设计与平台无关的应用程序逻辑的模型,也有必要标准化特定域的元模型。因此,不仅可以标准化转换语言,还要在转换库中捕获可重用的转换规则。开发者通过标准化的UML配置文件或各自域的元模型来设计应用程序的模型,并且商业化的或开放源代码的抓还模块通过该模型生成平台特有的代码。
在MDA环境中,OMG将这些标准化的元模型称为核心模型。
在一些情况下,转换引擎不能转换模型,因为源模型中的信息不是特别充分。例如,目标元模型可以提供识别源元模型构造的不同方法。
MDA提出了模型标识的概念。模型标识是转换的源模型中的额外信息,该信息用于控制转换。这些注释一般取决于目标元模型。
如果准备接受其他结果,则有另一种选择可以在几乎没有标识的情况下工作,这种机制需要以如下方式扩展元模型:模型中存在足够的信息,生成器可根据这些信息在不同可选方法之间选择。
在J2EE中,有关在每种情况中应该使用哪种实现可选方法的决策现在可以委托给J2EE转换。当然,必须扩展元模型,并且并不总是可以实现这一点。然后,不是使用目标元模型的概念扩展元模型,而是使用转换程序可以使用的一般信息,这构成了源元模型的丰富内容,而不是使用目标元模型特有额构造“污染”它。
术语“可执行的UML”通常可以在MDA环境中见到。这不是正式的标准,而是在所有人都努力实现将UML建立为完全成熟的编程语言这一目标的过程中,讲着各种努力据记载一起形成的所谓“术语”。因此,必须清除UML的所有冗余和歧义,产生UML图的可执行性:建模语言的元模型越小,则更容易为其实现编译器或解释程序,关于可执行的UML,另一个必要的成分是动作语言,必须使用它来定义软件系统的完整实现。