MetaModelEngine:元模型引擎开发思路

DSM:使用MetaEdit+编写Family Tree Modeling Language中介绍了MetaEdit+的一个家族树模型语言应用示例,通过示例的学习掌握了基本的概念,本篇将介绍一下OpenExpressApp的元模型引擎MetaModelEngine的应用思路。

为何借鉴MetaEdit+思想

我在软件产品线工程方法 - 四个主要方法原则提到产品线带来的几个好处:减少成本,快速上市,减少风险和提高质量,这些都是我们在做软件产品时都期望达到的。在我以前blog中也有一个软件工厂的图,该图表明了模型驱动开发是支持软件产品线工程的一种方法,所以我会比较关注模型驱动开发。

信息系统开发平台OpenExpressApp - 总体架构的由来中我讲到过MetaEdit+是全球DSM领域内著名的产品,它能够带来产品线中期望的几个好处:

  • 缩短上市时间,开发生产力能够提高5-10倍
  • 开发人员可以集中设计和关注业务功能,而不必用代码去写所有方面的内容
  • 由于使用的是经过验证的工具,产品质量显著提高
  • 可以完全控制模型和代码生成,而不像MDA方法模型和代码生成固定,不便于特定领域开发

通过以上说明可以看出,我借鉴MetaEdit+的思路是想采用一种模型驱动开发方法来支持产品线工程。

元模型引擎对OpenExpressApp平台的支持

知道MetaEdit+已经好多年了,之前也研究过这个工具,并查看过它的一些资料,也是在OpenExpressApp计划之中的重要组成部分。

  1. 支持OpenStudio的图形化建模,让业务人员能看、能做,符合OpenExpressApp让业务人员编写软件的价值主张,通过业务人员更早更多的参与,可以更快的构建应用
  2. 支持OpenTool的工具:快速原型开发工具、图形化自动化测试工具

Visual Studio的DSL架构

  • Microsoft.VisualStudio.Modeling:域模型框架时整个系统的核心,负责管理模型的元素和连接,也就是域类和域关系的实例。
  • Modeling.Disgrams:设计界面框架建立在域模型框架之上,它负责处理图形符号的显示,包括处理图表、图形、连接器和装饰等元素在设计界面上的显示
  • Modeling.Validation:验证框架负责执行关于模型元素和连接的验证方法,如果验证失败,它还要负责创建错误对象。它与Shell框架交互,把错误信息显示到Visual Studio的错误窗口
  • Modeling.TextTemplation:模板引擎负责执行文本模板来生成代码或其他的工件。模板引擎室一个独立的组件,用于执行来自非DSL的模板输入
  • Modeling.Shell:建模用的Shell负责管理将涉及器集成到Visual Studio中,例如处理工具窗口和菜单名利,以及文件的打开和关闭等

对MetaEdit+的技术借鉴

  • 组件架构图
    MetaModel实现步骤:图形编辑器(Diagram Editor)-> 矩阵和列表编辑器(Matrix和Table Editor)-> 代码生成器

  • 模型架构图:GOPRR为元元模型层、领域概念为元模型层、产品规格为模型层、实例为系统应用层

  • 元模型概念GOPPRR:图、对象、属性、端口、关系、角色
    • Graph 图:一个独立模型,通常使用图来表示
    • Objects 对象:图的主要元素,例如例子中的Person
    • Property 属性:图、对象、端口、角色和关系都可以拥有一些属性描述
    • Port 端口:定义角色如何连接对象的可能语义
    • Relationship 关系:让对象连接在一起
    • Role 角色:连接关系与对象之间
  • 属性和非属性
  • 图的组成

  • 绑定Binding

  • 对象引用图 Decomposition

实现DSM步骤

  • 定义领域规则
    1. 定义规则
    2. 规则例子:【开始】状态不能直接连接到【结束】状态
         
  • 画标记
  • 实现生成器

主要技术及初步计划

  • 元模型引擎
  • 图形编辑器
  • 代码生成器

发表评论