MDA(模型驱动架构)——OMG 体系入门讲义

意大利那不勒斯大学 D.I.S.I. 的 Davide Buscaldi 讲义(源自《Software Architecture in Practice》配套 useful-PPT),系统介绍 OMG 2001 年前后推出的 Model Driven Architecture。属于 2000 年代初视角的 MDA 综述,概念框架(PIM/PSM/Mapping)至今仍是模型驱动工程(MDE)的词汇基础。

问题的由来:技术异构无法在低层统一

  • 编程语言(COBOL/VB/C++ 各有百万级从业者)、操作系统(Unix/MacOS/Windows/PalmOS)、网络协议(Ethernet/IP/USB/蓝牙/802.11)层面永远达不成共识,异构性阻碍企业分布式系统开发
  • 人们唯一能达成一致的层面是中间件——夹在操作系统与应用组件之间、屏蔽异构性的软件层
  • 但中间件自身也在增殖:CORBA、COM/DCOM/MTS、Java/EJB、XML/SOAP、C#/.NET,谁也没统一谁 → OMG 出场(非营利联盟,制定可互操作企业应用规范,UML 即其产物)

MDA 核心概念

把”系统功能的规格”与”功能在具体技术平台上的实现规格”分离开——“Design once, build it on any platform”。

  • 模型:对系统功能、结构、行为的正式规格(源代码是模型,UML 规格也是模型)
  • PIM(Platform Independent Model):用 UML 表达的、抽掉技术细节的系统结构与功能形式化规格,表达业务功能与行为,不受技术细节污染
  • PSM(Platform Specific Model):PIM 的功能在具体平台上如何实现,用 UML + 平台特定 profile 表达
  • Platform(平台):与软件组件根本功能无关的技术与工程细节的总和
  • UML Profile:标准化扩展集(stereotype + tagged value),把 UML 定制到特定用途/平台(CORBA profile 2000 年已标准化)
  • 基础设施三件套:
    • MOF(Meta Object Facility):定义元模型的 OMG 标准,提供 Class/Association/Package 三种元数据建模构件;UML 和 CWM 本身都用 MOF 定义
    • CWM(Common Warehouse Metamodel):数据仓库标准,让数仓/BI 元数据在工具、平台、元仓库之间互换,由 MOF 定义,含数据资源/分析/数仓管理等分模型
    • XMI:模型交换格式(讲义引用链中提及)

元模型层级(MDA metamodel)

实例 → 模型 → 具体元模型(如 UML)→ 元元模型(MOF),四层抽象。

开发流程三步

  1. 建 PIM:所有 MDA 项目起点;工具内置 Pervasive Services 与 Domain Facilities 的表示,可菜单化选入应用
  2. 映射出 PSM:首轮迭代后 PIM 输入 mapping 步骤;代码部分自动生成部分手写;一个 PIM 可映射到单个或多个平台
  3. 生成应用:工具按开发者选定的部署技术生成全部或大部分实现代码;新平台再集成时可逆向工程回模型再重新部署

Mapping 分类(关键概念)

Mapping = 修改一个模型得到另一个模型的规则与技术集合,本身用 UML 描述:

  • Refining(精化):PIM→PIM,让模型变不那么抽象,用于开发周期中增强/精化/过滤模型,无需平台信息(例:分析模型→设计模型)
  • PIM→PSM 投影:把 PIM 投到执行基础设施上,基于平台特征(应用 UML 描述/profile 表达);同一 PIM 有多种变换方式——人工研读后手工构造、或工具自动映射,不同映射实现生成的代码可能大相径庭

实践状态与结论(2001 年视角)

  • 采用处于早期:UML profile 进度 CORBA/EJB 已采纳、SOAP/XML 进行中、.NET 未启动;预言”成熟 MDA 工具还需两三年”;CUTTER 分析师 Paul Harmon:“这是 UML 之后最令人兴奋的企业软件举措”
  • 早期采用者:Interactive Objects Software(ArcStyler)、Kennedy Carter(iUML/iCCG,做过 F-16 任务计算机)、Kabira、Secant
  • 优点:PIM 抽象出结构与行为后,验证模型正确性更容易、多平台产出实现更容易、工具化方案更易应用
  • 主要缺陷:MDA 没有提供映射规格的标准——不同映射实现生成差异巨大的代码/模型,会造成软件对特定映射方案的依赖

工程启示( retrospect 视角)

  • MDA 的失败教训与保留价值:完整 PIM→PSM 自动生成的理想未实现,但 PIM/PSM 词汇、profile 机制活在 UML/MDE 里;“映射无标准导致厂商锁定”的批评对今天的低代码/DSL 代码生成依然成立
  • 与云盘关联笔记互见:软件体系结构描述(Lecture-7)、SOA 原理与实践系列同为 OMG/体系结构谱系

元数据

  • 原文件:/田浩然上传的资料/0B105软件体系结构/SoftwareArchitectureInPractice/useful-PPT/MDA.ppt(558 KB,olefile 提取 PPT 文本)
  • 课程簇:0B105 软件体系结构(Software Architecture in Practice,Dick Grune 教材配套)