我正在使用GEF编辑器和基于EMF的模型创建 Eclipse RCP。
GEF 书中提到的关于模型的一件事是
模型应该通过侦听器广播所有状态更改,以便可以在模型不直接了解控制器或视图的情况下更新视图。
在本书的示例中,每个模型元素类,例如 、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 的网站上描述的那样),还是我可以“手动”扩展模型?
并且:我是否必须扩展**interface**
模型的 s(例如MyGraph
)或它们的实现类(例如MyGraphImpl
)?
我会非常感谢任何正确方向的指示......
谢谢!