【问题标题】:View holds an object from the Model in a MVC pattern, is this OK?View 以 MVC 模式从 Model 中保存一个对象,这样可以吗?
【发布时间】:2010-11-28 05:12:27
【问题描述】:

我有一个保存树的树项的类。假设构造函数看起来像这样ViewTreeItem(List item),可以这样调用

for( List l : model.getLists() )
    getTree().add( new ViewTreeItem(l) );

我的控制器 ControllerTreeItem 使用 List item 引用直接修改列表,而不是调用模型来完成工作。

这样改模型可以吗?如果不是,我该如何以另一种方式做到这一点?

【问题讨论】:

    标签: java model-view-controller


    【解决方案1】:

    MVC 的重点是使设计灵活。我认为在模型中有一个可以用来修改列表而不是直接修改的方法可能会更好,因为这会否定使用 MVC 模式的全部意义。

    【讨论】:

    • 所有模型方法都应该调用notifyObservers()方法吗?或者他们可以不通知,因为在特定情况下不需要通知。
    • 好吧,您只需要在要将数据显示给用户时通知视图即可。如果不需要,则无需这样做。因为模型持有系统的状态,所以只在你想显示更新视图时通知就足够了。否则,会有不必要的开销..
    【解决方案2】:

    假设您的视图正在观察模型,那么:

    1) 视图保留对模型的引用是正常的。

    2) 您应该通过调用模型中的方法来更改模型,并在调用视图 onUpdate(Model model) 时更新您的视图。

    【讨论】:

    • 其实这个 View 并没有观察模型,因为调用 notify 方法时所有的树项都会被销毁并刷新。我只在选择新 LIST 时这样做。
    猜你喜欢
    • 1970-01-01
    • 2014-01-14
    • 2015-06-29
    • 2015-01-23
    • 2014-01-04
    • 1970-01-01
    • 2016-02-28
    • 2011-01-17
    • 2011-09-25
    相关资源
    最近更新 更多