1

我正在使用GEF编辑器和基于EMF的模型创建 Eclipse RCP。

GEF 书中提到的关于模型的一件事是

模型应该通过侦听器广播所有状态更改,以便可以在模型不直接了解控制器或视图的情况下更新视图。

在本书的示例中,每个模型元素类,例如 、PersonMarriage(该示例是一个家谱编辑器),都有添加和删除相应侦听器的方法,例如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 的网站上描述的那样),还是我可以“手动”扩展模型?

并且:我是否必须扩展**interface**模型的 s(例如MyGraph)或它们的实现(例如MyGraphImpl)?

我会非常感谢任何正确方向的指示......

谢谢!

4

2 回答 2

2

EMF 有自己的通知机制,无需添加另一个侦听器机制,快速谷歌搜索给了我另一个Lars教程,其中有一个很好的例子来演示这个机制

于 2012-03-22T10:44:28.583 回答
0

There is little to no reasons in using EMF and GEF together. If you model in EMF and using GEF as an editing framework you should consider using GMF http://www.eclipse.org/modeling/gmp/ insted. GMF provides an extension on Draw2D, GEF and EMF, which glues it together seamlessly. And if you're just building nodes and edges considef using Graphity as a much easier framework then GEF of EMF, which will give you quick and nice results very soon.

于 2012-04-05T12:44:27.727 回答