我们从一张繁杂的图形说起:

花了很大的力气,整理了这张图,试图说明我自己都时常会被绕进去的一些概念,这也是模型驱动开发MDD、面向对象OO的核心概念,希望能用文字的方式把这个图介绍清楚。
图例说明:
- 蓝色框:各种术语,省略号代表可以延展更多
- 蓝色无箭头的线:代表相等、相同,只是换一种说法
- 绿色箭头:读为“描述”,反向为抽象,比如:“猫的类”描述了“薛定谔的猫”,“薛定谔的猫”抽象成了“猫的类”
- 橘黄色箭头:代表“定义”,反向为“存储”,比如:“实例”存储为“数据”,“数据”定义了“实例”
一. 横向解读
- 第一行:简单难度
- “薛定谔的猫”是指一只特定的猫(这应该是世界上最著名的一只猫,如果没听过,可以问问初中物理老师),这就是一个具体的“实例”,“实例”是面向对象的一个术语;
- “实例”存储为“数据”,或者说用“数据”来描述实例,比如:这只猫的有千克重、什么颜色、什么品种等等(其实没人知道)
- 第二行:困难难度
- “猫的类”就是“模型”,在程序中以类的方式存在,在可视化的建模语言中,一般以一个框的形式存在,总之,这就是模型,抽象了猫的共性(类的属性),比如:猫有重量、有花色、有4条腿、有两个耳朵等;
- “模型”存储为“元数据”,在编程语言中通过反射机制获取到的,其本质就是“元数据”,所以,“元数据”定义了“模型”。“元数据”一般定义为描述数据的数据,这个我们在后面竖向解读具体说明。
- 第三行:噩梦难度
- “类的定义”就是“元模型”,在编程语言中是由语言本身来定义的,即一个类需要有类名,包含零个或多个属性,包含方法等等,这些都是属于“元模型”;
- “元模型”存储为“元元数据”,编程语言中也可能没有这一层的定义,只从字面来看,“模型”存储为“元数据”,都加上元字,就成了“元模型”存储为“元元数据”,很简单,但是要真正理解“元元数据”的含义,就要花费一番脑力了。
- 第四行:地狱难度
- 根据上述的规则,我们也可以以此类推,“类的定义的定义”就是“元元模型”,存储为“元元数据”;
- “类的定义的定义的定义”就是“元元元模型”,存储为“元元元数据”(有点口吃的感觉)。
二. 纵向解读
- 第一列:
- “薛定谔的猫”抽象为“猫的类”,“猫的类”描述了“薛定谔的猫”,比如:“猫的类”定义了猫有两只耳朵,那“薛定谔的猫”也具有两只耳朵;
- “猫的类”抽象为“类的定义”,“类的定义”描述了“猫的类”,比如:“类的定义”定义了类具有类名、属性和方法,那“猫的类”也具有类名(猫)、属性(体重、花色、腿等)和方法(即行为,比如:叫、跑、抓老鼠)
- “类的定义”抽象为“类的定义的定义”,这个在现实中我没有想到对应的场景,很难解释清楚,或者说我自己也一脸懵,大家发挥想象吧。我记得微软的DSL Tools中有对实体的定义,有相似之处,大家不妨去理解一下
- 第二列:
- “实例”抽象为“模型”,“模型”描述了“实例”,换句话说,描述“实例”的东西就是“模型”,而“实例”是“模型”的具体体现,一个具体的对象;
- “模型”抽象为“元模型”,“元模型”描述了“模型”,换句话说,描述“模型”的模型就是“元模型”,而“模型”是“元模型”的具体体现;
- 咱们再加个“元”字,“元模型”抽象为“元元模型”,“元元模型”描述了“元模型”,换句话说,描述“元模型”的东西就是“元元模型”,而“元模型”是“元元模型”的具体体现;
- 第三列:
- “数据”抽象为“元数据”,“元数据”描述了“数据”,换句话说,描述“数据”的数据就是“元数据”,而“数据”是“元数据”的具体体现,一行具体的数据;
- “元数据”抽象为“元元数据”,“元元数据”描述了“元数据,换句话说,描述“元数据”的数据就是“元元数据”,而“元数据”是“元元数据”的具体体现;
- 咱们再加个“元”字,“元元数据”抽象为“元元元数据”,“元元元数据”描述了“元元数据”,换句话说,描述“元元数据”的东西就是“元元元数据”,而“元元数据”是“元元元数据”的具体体现;
三. 整体解读
上面的内容已经绕的云里雾里了,希望大家还能清醒的继续往下阅读,后面咱们综合起来,与现实对照一下:
- 基础:“薛定谔的猫”是一个“实例”,存储为“数据”,抽象成“猫的类”这个“模型”,存储为“元数据”,这部分在日常的开发工作中都是天天遇到的,理解起来很轻松;只是注意一点,“元数据”一般是由语言处理的,而不需要开发人员去处理;
- 进阶:如果我们把上述的“元数据”存储到数据库,则除了通过反射机制,也能很容易的获取,而且程序的功能会强很多,我相信常用反射机制的开发人员都有深刻体会;在这里,可以通过代码或者反射去获取“元数据”信息,更好的方式是使用建模工具建模,然后存储起来就有了“元数据”;
- 深入:如上所说需要建模工具,建模工具里面的那些用来建模的图例,就是“元模型”,其存储的数据就是“元元数据”,同样的推理方式,如果我们能使用这部分“元元数据”,那程序的能力又将上一个台阶,其带来的好处是难以想象的;这里,其实就是元型真正的价值所在,提供的建模工具,就是“元模型”,用于设计“模型”;
- 深渊:建模工具从何而来,我们降维思考一下,就可以想到,我们或者可以通过一个工具来生成建模工具,这样,我们就可以有一个设计“元模型”的设计器,这样就可以通过这个设计器设计不同的“元模型”,解决更多的“元模型”设计需求,比如:类似于UML对软件的价值,我们也可以设计一个ABC来描述某一个特定领域,在此不得不再提到微软的DSL Tools,就是用于干这个的,在这个层面来说,已经达到人脑的理解极限了。
到此,不知道读者对于这张图是否理解,以及理解有多深刻,但是,对这张图的领悟,每多一层,您的编程思维就会提高一层,就会看到更高更全的层面,就好像二维、三维、四维一样,对于三维生物而言,四维生物就是神,所以,理解深刻了,您就会编程高手中的高手中的高手……。
免费下载PDF文件
您的公司
您的姓名
您的电话
您的邮箱