11

我们正在制作一个相当大的 Swing 应用程序,它必须实现 MVC 模式。该应用程序当前如下所示:


有不少观点。它们以分层方式创建,其中一个主视图包含(并创建)多个视图,这些视图都包含它们自己的一组子视图等。这些视图中的每一个都通过调用模型独立于其他视图从模型中检索信息必要时使用静态方法。

还有相当多的控制器彼此完全分开。每个控制器都属于一个视图。每个视图创建自己的控制器,并将控制器添加为用户输入的侦听器。控制器从视图接收事件,然后通过模型静态方法修改模型。当视图调度不影响模型但仅影响视图的事件时,视图会自己处理这些事件 - 无需通知控制器有关事件。也就是说,控制器完全不知道视图,控制器的目的只是处理模型的操作。| 编辑:控制器当前是其视图的附件;它们只包含事件处理的逻辑。也就是说,控制器本身不是组件,也不包含组件。它们的实现方式与以下示例相同:MVC 示例|

应用程序中的模型非常被动,甚至没有监听器(它代表一个数据库)。它接收来自控制器的更新。


在这个例子中,视图拥有控制器。如果控制器拥有并创建视图,并且让视图不知道控制器,而不是相反,在一般情况下会更好吗?在那种情况下,为什么?这将如何设计?如果没有,是否有更好的设计让控制器仍然不知道视图?或者,最好的设计都不是它们吗?

编辑:

原始 MVC 定义中所述:

“视图负责建立这种相互通信......”这一行似乎表明视图创建了控制器,或者至少具有对控制器的初始引用,反之亦然。

所以这至少是一种可能的方法(它是一个有效的 MVC 模式),但主要问题仍然存在;哪个更好,最好的设计会是什么样子?尤其是在处理与其各自视图密切相关的许多控制器时?

编辑:另一个引用控制器的视图示例:Oracles 示例

4

1 回答 1

7

如本大纲所示,控制器具有模型和视图。任何子视图都由各自的父视图管理。如此处所讨论的,子视图可以事件转发给父级。这里有一个带有更多链接的简单示例。

于 2011-05-08T13:25:05.887 回答