使用MVC,应该如何处理Views之间的通信?模型之间?在我的追求

问题描述:

问题之三要正确理解MVC 之前,我实现它:使用MVC,应该如何处理Views之间的通信?模型之间?在我的追求

我有两种情况记:

  1. 主要应用 窗口需要启动 首选项窗口。 (一个视图 调用另一个视图。)
  2. 应用程序 的主要模型需要访问首选项模型中的属性 。 (一型号 访问另一个模型。)

这些问题是相互关联,它们都涉及到整个模型 - 视图 - 控制器三胞胎沟通,我没有找到我的谷歌搜索的很多讨论的话题。

最显而易见的方法来解决,这是一个*“应用程序”对象模型之间处理事务,并允许控制器调用彼此的方法来包装的一切。我已经看到这个实施,但我不相信它是一个好主意。我还可以看到控制器观察多个模型并响应多个视图的可能性,但是这看起来会变得非常混乱并且难以遵循。

建议就如何最好地实现这种串扰的?我觉得这是一个非常明显的问题,但我一直无法找到一个有据可查的解决方案。

在更广泛的注意,如果任何人有一个链接,显示了典型的方法,这些各种各样的MVC的问题,我希望能看到它。我没有多少运气找到坚实的,不平凡的参考。 Python中的例子可爱,但我会很乐意阅读任何东西。

编辑1

我看到正在说的下方,一般没有人一些非常有趣的事情似乎与我所描述的方法有问题。这已经几乎是文森特所描述的FrontController设计的一种懒惰形式。在实施这种模式时我当然没有预见到任何问题,然而,似乎没有人真正解决了模型间交流的问题。所有的答案似乎都是针对单个模型中的对象之间的通信。我更感兴趣的是为应用程序的单独组件维护单独的模型,这样我就不会将50个状态属性填充到单个Model类中。我应该将它们作为子模型来维护吗?

+0

我们正在讨论模型中的多个类。该模型引用表示数据和操作数据的所有类(组件)组成模型。这些课程彼此合作。 – 2008-10-23 02:47:54

你可能要考虑找了前端控制器设计模式。

Front Controller模式定义了负责处理应用程序请求的单个组件。前端控制器集中查看选择,安全性和模板等功能,并将它们一致地应用于所有页面或视图。因此,当这些函数的行为需要改变时,只需要改变一小部分应用程序:控制器及其帮助程序类。

这样从视图中的所有请求去FrontController设计谁再决定哪些具体行动(控制器)来调用。有时,它可以直接转到另一种观点,就像在第一种情况下一样。

模型中的多个对象彼此交谈没有问题。事实上这将是非常普遍的。我看到它的方式,模型中的所有对象都像一个组件一样代表数据上的数据和操作。

This文章可能会有所帮助。和this之一。

对于(1),视图不会调用其他视图。它们调用可能导致呈现其他视图的控制器操作。在你的情况下,主应用程序窗口包含一个用户界面元素(按钮,链接),调用控制器动作来显示首选项窗口。对于(3),模型组件肯定可能是相互关联的。这并非意外,也不是必须避免的。例如,您的客户模型可能有一组关联的订单。通过客户类中的方法访问客户的订单是非常自然的。

您可能想要查看*上的MVC page以获得概述。

模型并不意味着一个模型对象。该模型是整个域模型的子集,它与控制器操作和有问题的视图直接相关。