GEF初步

 

l  概念

GEFeclipse的图形编辑框架,利用此框架可以实现非常强大的图形化编辑功能。

l  MVC模式

MVC模式"Model-View-Controller"的缩写,中文翻译为"模式-视图-控制器"MVC应用程序总是由这三个部分组成。Event(事件)导致Controller改变ModelView,或者同时改变两者。只要Controller改变了Models的数据或者属性,所有依赖的View都会自动更新。类似的,只要Controller改变了ViewView会从潜在的Model中获取数据来刷新自己。

l  如何体现MVC

模型:GEF没有特定的模型。它的模型可以是xml文件、java对象或者EMF模型,但是模型必须有一种消息机制在自身属性发生变化时通知给GEF

视图:大多数GEF都采用Draw2D做视图层。

控制器:GEF的控制器是所谓的EditPart对象,更确切的说是一组EditPart对象共同组成了GEF的控制器部分,每一个模型对象都对应一个EditPart对象。用户的编辑操作被装换为一系列的请求Request,有很多类似的请求,这些种类在GEF里被称为角色RoleGEF里有图形化和非图形化这两大类角色。角色是通过编辑策略EditPolicy来实现的,EditPolicy的主要功能是根据请求创建命令Command,而命令直接操作模型对象。

l  GEF过程

这段英文很好的阐述了GEF的工作过程,理解这段话对理解GEF有很重要的作用。

When the user causes an event, a Tool object sends a Request to the selected EditPart. This EditPart uses a List of EditPolicys to create a Command that updates the Model class. When the Model changes, it fires a PropertyChangeEvent. After receiving this event, the EditPart modifies the component’s Figure (View) by invoking one of its refresh() methods.

当用户进行了一项操作时,GEF有一个工具对象会发送一个相应的请求给用户操作的EditPartEditPart从其注册的一系列的EditPolicy中找到操作对应的ModelCommand,并执行该CommandModel进行操作,Model会在其操作完成时发出一个PropertyChangeEventEditPart接收到这个Event后通过调用Figurerefresh()方法将Model的更改显式出来。

l  GEF项目的包

很多人发现一个简单的GEF项目都有很多包,而GEF本身的过程又比较复杂,所以觉得GEF是很复杂难懂的东西,其实不然。

一个GEF项目主要有以下主要的包:

包名

内容

必有

备注

model

模型定义

Model可能在别的项目里面已经定义好了

figure

视图模型定义

 

part

EditPart定义

 

policy

EditPolicy定义

可以绕过不用

command

修改模型属性的command

 

action

编辑器的右键菜单功能

可以不扩展编辑器右键内容

 

l  疑问

1.OutlinePage像鸡肋

在对JBPM的流程设计的改造过程中发现:如果要修改Model的属性,可以直接让Model实现IPropertySource接口,然后在properties视图中对模型属性进行修改,基本可以绕开OutlinePage。如果模型属性层次比较复杂,并且模型下面还有子模型的时候,使用OutlinePage可以使模型的层次很清晰。

2.为什么要通过EditPolicy注册ModelCommand而不直接就在EditPart上注册Command

GEF说这种方式可以实现CommandEditPolicy的各种组合实现灵活的操作。个人认为如果ModelCommand不是很多很复杂的话可以自己设计一个简单点的机制绕开EditPolicy层。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值