1

http://www.vainolo.com/tutorials/的教程中,模型的位置保存在模型中。我想在加载文件时将所有数据保存到文件并获得相同的视图。

在寻找这个问题的答案时,我得到了另一个更重要的问题:
GEF 真的是 MVC 框架吗?

GEF Controllers告诉 mvc 控制器角色取自EditPart。它创建指定的对象。
关于控制器保存视图部分的示例,但 mvc 模式告诉,控制器仅对用户交互做出反应并告诉视图,它必须更新或其他。
总结以下代码是错误的,因为它是EditPart的一部分并且它会发生变化:

public void refreshVisuals(){
    IPersonFigure figure = (IPersonFigure)getFigure();
    Person model = (Person)getModel();
    figure.setName(model.getName());
    figure.setSurname(model.getSurname());
}

关于维基百科,视图在模型上有一个观察者,所以 GEF 的以下句子是错误的,不是吗?EditPart
将实际模型状态同步到视图并实现观察者。

在 MVC 模式中,控制器必须监听模型的变化。在 GEF 中,EditPart 是控制器,因此它们必须侦听其模型以根据模型的新状态更新视图。

那么什么是正确的呢?

为防止交叉发布,请查看http://www.eclipse.org/forums/index.php/m/755178/

4

1 回答 1

2

维基百科在 MVC 文章的开头指出“MVC 有不同的风格(MVC 概述)。有时视图可以直接读取模型并自行更新,有时这是由控制器完成的。

MVC 提供的主要概念是将表示与视图分离,它不应该包含任何逻辑。模型的更改由控制器执行,视图的更改是在模型更改时引起的。但这并不意味着控制器不能在模型更改时更新视图。总得有人去做吧?我个人认为直接从模型中读取视图并不是一个好习惯,因为这会使它们过于依赖,并且模型和视图应该完全分离。当您必须对模型进行更改(例如,字段从真实更改为计算中)时,这非常棒 - 您不必更改视图(但您可能必须更改控制器,但这通常是更轻松)。

希望这可以为您解决问题。

于 2011-11-08T09:55:21.450 回答