3

我的模型在我的 MVC 模式中,在运行时生成组件并通过 update() 方法将它们提供给视图以显示在屏幕上(你知道,模型是可观察的,视图是观察者)。但是我还需要给这些组件添加监听器,并且控制器有监听器方法(因为他们说MVC模式是这样的)并且它不参与这个更新过程。所以我不能在运行时添加监听器,只能在启动时在控制器的构造函数中添加。

我有一个想法,就是让控制器成为观察者,然后将数据提供给视图,并添加监听器。你觉得这样可以吗?

4

3 回答 3

3

我想你可能有一些电线交叉。

  1. 该模型是可观察的(检查!)
  2. 视图正在观察模型(检查!)
  3. 控制器绑定到视图(TODO!)

#3 意味着来自视图的用户交互应该调用控制器类中注册的侦听器,然后更新模型状态。

这是“经典”的 Swing MVC。 (来源:sun.com替代文字

一个“修改过的” Swing MVC(由其他一些关于这个问题的答案推荐),让控制器扮演中介者的角色。

在此设计中,当用户执行操作时,视图会在控制器上调用适当的方法。然后,控制器访问模型(可能更新它)。最后,如果模型被更改,它会通知感兴趣的侦听器(在本例中为控制器)。

这是一个“修改过的”MVC。 (来源:sun.com替代文字

第二种设计(“修改的”MVC)允许模型和视图非常明显的解耦。

有关更多信息,请查看有关 Java Swing MVC的这篇文章。这是梦幻般的。

于 2010-03-16T10:19:36.120 回答
2

是的,在我看来,让控制器成为模型观察者以允许它更新视图将完全符合 MVC 的正统观念。

于 2010-03-16T10:00:42.983 回答
2

例如,在摇摆中,控制器/动作侦听器是视图(按钮等)的观察者,并且在调用按钮时(即,当视图更改时)控制器启动并与模型交互并再次更新视图(使用新模型更改)

所以你最后的建议对我来说确实有意义:)

于 2010-03-16T10:02:52.233 回答