【发布时间】:2012-04-06 21:50:09
【问题描述】:
我正在使用 GEF 编辑器和基于 EMF 的模型创建一个 Eclipse RCP。
GEF Book 中提到的关于模型的一件事是
模型应该通过 listeners 广播所有状态变化,以便 可以在模型没有任何直接知识的情况下更新视图 控制器或视图。
在本书的示例中,每个模型元素类,例如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**s(例如MyGraph),或者它们的实现类(例如MyGraphImpl)?
我会非常感谢任何正确方向的指点...
谢谢!
【问题讨论】:
标签: eclipse model-view-controller listener eclipse-emf eclipse-gef