【问题标题】:Is the GEF really a MVC framework?GEF 真的是 MVC 框架吗?
【发布时间】:2011-11-08 17:55:21
【问题描述】:

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

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

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

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

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

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

那么什么是正确的?

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

【问题讨论】:

    标签: model-view-controller eclipse-emf eclipse-gef


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2012-10-26
      • 2014-10-25
      • 2011-03-23
      • 2012-05-31
      • 1970-01-01
      • 2010-10-05
      • 1970-01-01
      • 1970-01-01
      • 2011-01-10
      相关资源
      最近更新 更多