我正在使用 GEF 编辑器和基于 EMF 的模型创建Eclipse RCP。
GEF Book中有关模型的一件事是
该模型应通过侦听器广播所有状态更改,以便 视图可以更新,而模型没有任何直接的知识 控制器或视图。
在本书的示例中,每个模型元素类,例如Person
,Marriage
等(该示例是族谱编辑器),具有添加和删除相应侦听器的方法,例如, Person
的是:
public void addPersonListener(PersonListener l) {
listeners.add(l);
}
public void removePersonListener(PersonListener l) {
listeners.remove(l);
}
不幸的是,我使用的模型没有这些add/removeListener
方法。现在我需要一种方法来扩展模型并实现方法。我不知道从哪里开始,因为我对EMF了解不多。
该模型是基于图形的,因此它具有节点和边(“关系”)。通过调用将元素添加到图表中,例如MyNode node = ExampleFactory.eINSTANCE.createMyNode()
并将新节点添加到图表中,例如graph.addMyNode(node)
。
由于我缺乏关于EMF的知识,我不明白的是模型中的“扩展点”。
模型结构大致如下:
org.example.structure.MyGraph
:
public interface MyGraph {
...
MyRelation addMyNode(MyNode sourceMyNode, MyNode targetMyNode,
MYTYPE_NAME myRelationType);
...
}
然后还有一个班级MyGraphImpl
org.example.structure.impl.MyGraphImpl
:
public class MyGraphImpl extends Graph implements MyGraph {
...
protected MyGraphImpl() {
super();
this.init();
}
...
private void init()
{
//creates indexes
}
...
@Override
public void addMyNode(MyNode myNode)
{
super.addNode(myNode);
}
...
}
我是否必须 - 为了缺乏知识而这样做 - 使用EMF扩展单个模型类(如Lars Vogel's website所述),或者我可以扩展模型“每手”?
而且:我是否必须扩展模型的**interface**
(例如MyGraph
)或其实现类(例如MyGraphImpl
) ?
我会非常感谢任何正确方向的指示......
谢谢!
答案 0 :(得分:2)
EMF有自己的通知机制,没有必要添加另一个监听器机制,快速谷歌搜索给了我另一个tutorial Lars带有一个很好的例子来演示这种机制
答案 1 :(得分:0)
一起使用EMF和GEF有很少甚至没有的原因。如果您使用EMF进行建模并使用GEF作为编辑框架,则应考虑使用GMF http://www.eclipse.org/modeling/gmp/。 GMF提供了Draw2D,GEF和EMF的扩展,可以无缝地粘合在一起。如果您只是使用Graphity作为一个更容易的框架构建节点和边缘,那么EMF的GEF将很快为您提供快速而美观的结果。