MVC模式:哪个更好?对于视图或控制器来创建和引用另一个?

时间:2011-05-08 12:21:38

标签: java model-view-controller swing design-patterns decoupling

我们正在制作一个相当大的Swing应用程序,它必须实现MVC模式。 该应用程序目前看起来像这样:


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

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

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


在此示例中,视图拥有控制器。如果控制器拥有并创建视图,并且如果让视图不知道控制器而不是相反的情况,那么在一般情况下会更好吗?在那种情况下,为什么? 这将如何设计?如果没有,是否有更好的设计,控制器仍然没有意识到这些观点?或者,也许是他们中最好的设计?

修改

Original MVC definition中所述:

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

所以这至少是一种可能的方法(它是一种有效的MVC模式),但主要问题仍然存在;哪个更好,最好的设计会是怎样的? 特别是在处理与其相关的许多控制器时 看法?

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

1 个答案:

答案 0 :(得分:7)

如此outline所示,控制器具有模型和视图。任何子视图都由相应的父视图管理。如所讨论的here,子视图可以事件转发给父母。有一个简单的示例here,其中包含更多链接。