<!--[if !supportLists]-->1. <!--[endif]-->EMF解释
EMF全称Eclipse Model Framework,顾名思义,就是用来建模的。这里我们可以用一些类比的概念来进行理解。从操作系统的角度,我们写了一个程序,但是程序在操作系统中运行时就是一个进程,所以程序和进程就是静态和动态的概念;又如在面向对象编程中,我们写的是类,在系统运行的时候,我们操作的是对象,所以,类和对象就是静态和动态的概念。同样,在使用UML进行建模的时候,我们先提取出类图,用于描述系统的静态组成,再提供对象图,来描述某一特定场景下系统的动态状态。回到EMF上,他提供了一套用于描述系统静态组成,以及与之对应的用于编辑系统动态行为的工具。
<!--[if !supportLists]-->2. <!--[endif]-->EMF组成
EMF.Ecore |
EMF.edit |
EMF.editor |
<!--[if !supportLists]-->3. <!--[endif]-->EMF分述
<!--[if !supportLists]-->a) <!--[endif]-->EMF.Ecore
<!--[if !supportLists]--> i. <!--[endif]-->作用:他提供了用于描述系统组成的工具。在EMF出现以前,我们可以使用UML图,Java文件,或者其他的格式来描述系统的组成,所谓系统的组成就是说,系统中应该有哪些角色和对象,以及他们之间的组织关系,几个例子,像一个选课系统,我们就应改标识出,系统中最起码需要有学生与课程两个对象,然后他们之间是一个一对多的关系,这就叫做系统的组成。EMF出现以后,他也提供了一套用于描述系统组成的工具,而为了重用已有的资源,他也提供了一套从已有的UML图,Java文件中导出模型的机制。所以,总的来说,EMF.Ecore的作用就是提供了一套模型(用于描述系统)和一套工具(用于导入已有模型)。
<!--[if !supportLists]-->b) <!--[endif]-->EMF.editor
<!--[if !supportLists]--> i. <!--[endif]-->作用:他提供了用于编辑系统动态行为的工具。所谓动态行为,他是跟某一特定场景关联的,还以之前的选课系统为例,选课系统是一个通用的情况,具体到某一次选课,我们可能生成了A,B,C三个学生,然后每个学生分别选了a,b,c门课,然后A与a,B与b,C与c之间的描述,就是系统的一次动态行为。EMF.editor就提供了一套根据某一特定模型来编辑和修改某一次行为的机制,包括树形编辑器,属性编辑器,表格编辑器等。
<!--[if !supportLists]-->c) <!--[endif]-->EMF.edit
<!--[if !supportLists]--> i. <!--[endif]-->作用:他提供了在UI和模型之间进行适配的一套机制。由于,我们不可能为某一个特定的模型提供一套单独的editor,所以,EMF采用了MVC的机制,把整个模型切分成三部分,Ecore就是Model,editor就是View,edi就是Controller。但是EMF的MVC机制比传统的UI编程时所使用的MVC更加纯粹。从模型显示方面,EMF的editor既要显示模型,又要做到模型无关,所以,editor通过edit提供的一套适配器机制,来对模型进行显示。从模型修改方面,由于修改是模型相关的,所以,我们需要把UI中的事件变换成模型相关的操作。从模型通知方面,为了避免让模型与显示紧耦合,我们只能把通知事件先发送到edit,然后由他变换成editor所能感知的事件通知。