2010-05-26 106 views
2

我的应用程序遵循MVC设计模式。我一直遇到的问题是需要从Controller类外调用Controller类中的方法(例如,View类想要调用Controller方法,或者Manager类想调用Controller方法)。 MVC中允许以这种方式调用Controller方法吗?如果允许,有什么正确的方法来做到这一点?MVC - 调用控制器方法

根据我所遵循的MVC版本(似乎有那么多不同的版本),视图知道模型,而控制器知道视图。这样做,我无法访问控制器。以下是我找到的最佳网站,以及描述我遵循的MVC版本的网站:http://leepoint.net/notes-java/GUI/structure/40mvc.html。主程序代码块真的显示了这是如何工作的。

感谢您的任何答案。

回答

1

采取从您链接到文章这段仔细一看:

查看 此视图不知道有关控制器,除了,它提供了一种为控制器的侦听器的方法。其他组织是可能的(例如,Controller的侦听器是可以被View引用的非私有变量,View调用Controller来获取侦听器,View调用Controller中的方法来处理动作,...)。

您在视图和控制器之间有观察者模式。 MVC本身不是一个模式,但至少有两个组合。

管理视图/控制器通信的一种方法是使用事件。该视图触发某些用户操作的事件(不知道谁可能处理它们)。控制器处理这些事件并相应地执行操作。

+0

是的,我按照你说的方式使用事件,但是我最感兴趣的是“视图调用Controller中的方法来处理动作。”文章说,这在MVC的“其他组织”中是可能的。但是如何?我无法访问视图中的控制器(或其他任何地方)。 – JT703 2010-05-26 14:57:38

+0

事件也可用于处理操作。但是,为了让事情更加同步但仍然可以解耦,您可以定义控制器将实现的接口。接口将在某个初始化点传递给视图。然后该视图将通过该接口间接调用Controller。 – 2010-05-26 16:54:17