元元模型(Meta Object Facility)的个人理解
典型的元模型结构可以描述为:信息层,模型层,元模型层和元元模型层.
1.信息层(information layer)
信息是由我们希望描述的数据组成,这些数据通常是用户数据,主要职责是描述信息领域中的详细信息.在数据层用元数据进行对这些用户数据的描述.元数据即为关于数据的数据.即对业务数据的一次抽象(通常的表现形式是一些概念性的,抽象的名字,如单据,操作人等).
2.模型层(model layer)
模型层由元数据组成,元数据的集合被称为模型.模型层的主要职责是为描述信息层而定义的一种"抽象语言"(即没有具体语法或符号的语言,一般用嘴能进行描述,但不规范)。信息层的数据,即用户数据,是模型层的一个实例。可以理解为一个模型对应的是一个业务系统,只是比现实中运行的业务系统更加抽象一些,但一般情况下人们都能够理解这样的模型,但这种模型的构建不标准,不统一,不同的业务系统会有不同的业务模型,其表现形式也不尽相同,比如有些用文档进行描述,有些用视频进行描述,有些通过画图进行描述,等等.
3.元模型层(metamodel layer)
元模型层是由元元数据组成(元元数据的实例),元元数据定义了元模型的结构和语义,这些元元数据的实例化集合被称作为元模型(即元模型是一个语法体系,是关于元元数据结构实例化后的语法体系)。元模型层的主要职责是为了描述模型层而定义的一种"抽象语言",是对模型层的进一步抽象。也就是说,模型层描述的内容通常要比元模型层描述的内容丰富、详细。一个模型是元模型的一个实例(因为在元模型的定义下,是可以画出模型的,所以说模型层是元模型层的一个实例,也就是说可以通过元模型的语法规则画出很多的模型,根据不同的应用场景)。
4.元元模型层(meta-metamodel layer)
元元模型层是由元元数据的结构和语义的描述组成,这层的主要职责是为了描述元模型而定义的一种"抽象语言"。元元模型的定义要比元模型更加抽象、简洁(即元元模型是关于元元数据本身的更深一个层次的抽象,即是描述元元数据的抽象.)。一个元元模型可以定义多个元模型,一个元模型是元元模型的一个实例。
下面对上面所给出的定义进行一个深入的个人理解:
从1-4是一个从现实到抽象的过程,从4-1则是从抽象到现实的过程.
思想流程是,要描述一个现实中的数据,则先定义元数据,元数据用来描述现实数据的规则,是一种抽象的概念(通常由抽象名词来描述,比如单子,用户等这些就是一种元数据的表现形式),而这些元数据的组成就成为一个模型.在不同的现实世界中的业务,其实际数据是不一样的,那么通过元数据方式的描述,这些元数据组成的模型就是不一样的.从这个意义上来说,模型就是现实的一个抽象,现实是模型的一个具体实例.不同的模型对应不同的现实.就例如不同的项目中需求不一样,与用户交流时,所采用的一些名词和对业务的描述都会不一样.由于存在这种不一样的情况,我们需要将模型本身再次进行抽象,以此找出一种更好的方式来构建模型,而这种方式所构建出来的模型又是大家所熟知的,那岂不是很好的事情.事实上就有这么一种方法,就是对模型本身的数据再次抽象,就像对业务系统的一次抽象为模型一样,对模型的再次抽象,则成为了关于模型的抽象方法,就叫元模型.这样做的好处是将模型层由原来的分散的,针对不同的业务的描述的方式方法的不同进行统一.
元模型是一种语法结构,用于定义模型的各个部件.它由所谓的元元数据组成.元元数据为更加抽象的一个层次,它是用来进行描述如何去构建一个语法结构的数据.
而元元模型层则是关于元元数据本身语法的规则了,明白元元数据是怎么回事,一般用到元模型就行了.
上面的解释还是有些抽象,下面举个例子.
关于UML语法,大家都知道UML是用来进行构建软件系统模型的,也就是说,UML是一个元模型,我们用UML每构建一个系统模型,那么所构建的系统模型就是模型层的概念了.而UML是一个元模型,是因为一来他本身不涉及到全体业务模型,所以是一个抽象的关于如何构建业务模型的模型,根据前面的介绍,其自然是元模型了.并且UML这一个体系结构本身又是由另外一种规则进行定义出来的,而那一个规则就是由元元模型层构建出来的.元元模型中的元元数据对UML语法本身(如用例,类图等)进行了规则的定义,也就是说UML的所有语法规则是由元元数据实例化得出来的.通常情况下我们只需要明白为什么UML是一个元模型,它是如何产生的,受什么约束就行了.