RuN_Love

For better life.

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

项目组刚结束的项目中,我主要负责Eclipse插件的开发、GEF图形界面绘制以及RCP的搭建,做了良久的东西,多少有些感受,是好是坏,写来分享分享。

GEF

  GEF(Graphical Editing Framework)是Eclipse中用来绘制图形界面的框架,在eclipse官网有详细的介绍,初步的了解可以其FAQ里找到:http://wiki.eclipse.org/index.php/GEF_Developer_FAQ。

  GEF采用典型的MVC架构,其对应关系如下:

    M-Model

    V-Figure

    C-EditPart

  简而言之,Model是最原始的模型,我们需要根据Model的特性来绘制相应的图形;而Figure就是最终在Eclipse界面上呈现出来的图形;在两者之间,每个特定的Model怎样通过图形表现是通过EditPart来控制的。

  EditPart中的createFigure()方法用来绘制图形,每个EditPart的图形绘制方式是确定的,所以确定了EditPart也就确定了最终绘制的Figure。Model与EditPart之间的对应关系通过一个叫做EditPartFactory来进行注册,系统运行时会将Model传给EditPartFactory,EditPartFactory会根据这个Model返回相应的EditPart实例。如果我们需要同一个Model在不同的Editor中进行不同方式的显示,可以为其编写多个不同的EditPart,而在不同Editor的EditPartFactory中为该Model注册指定的(不同的)EditPart即可。

  在我们的工程中,就是用到了同一套模型的多视图显示,我们对GEF的MVC结构作了一点修改。在我们的理解中,Model是纯粹的模型,因此除了基本信息不应该包含其他信息,而在多视图显示中我们需要根据模型中的数据进行一些计算,将比较复杂的信息显示在视图中。如果讲这些与现实相关的信息添加到Model中,将改变Model的纯粹性,使得其需要包含一些仅对显示有帮助而对于原有模型没有任何意义的数据,为了解决这一设计问题,我们在Model和EditPart之间添加了一个ViewModel层,将于显示有关的信息记录在ViewModel中。在新的层次结构中,可以通过Model构造对应的ViewModel,而将ViewModel传入EditPartFactory则可以生成对应的EditPart。

posted on 2010-11-16 00:15  RuN_forever  阅读(8019)  评论(1编辑  收藏  举报