使用MVC,如何处理视图之间的通信?模特之间?

bou*_*ard 5 model-view-controller components controller model view

实现它之前正确理解MVC的问题是第三个问题:

我有两个案例:

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

这些问题的相关之处在于它们都涉及模型 - 视图 - 控制器三元组之间的通信,这个主题在我的谷歌搜索中没有找到太多讨论.

解决此问题的显而易见的方法是将所有内容包装在顶级"应用程序"对象中,该对象处理模型之间的事务,并允许控制器调用彼此的方法.我已经看到了这个实现,但我不相信它是一个好主意.我还可以看到控制器观察多个模型并响应多个视图的可能性,但这似乎会变得非常混乱并且难以遵循.

关于如何最好地实施这种串扰的建议?我觉得这是一个非常明显的问题,但我一直无法找到一个记录完备的解决方案.

更广泛地说,如果有人有链接显示这些MVC问题的典型方法,我很乐意看到它.我没有太多运气找到可靠的,非平凡的参考资料.Python中的例子很可爱,但我很乐意阅读任何内容.

编辑1:

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

Vin*_*nie 2

您可能需要考虑查找前端控制器设计模式。

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

这样,来自视图的所有请求都会发送到 FrontController,然后由 FrontController 决定调用哪个特定操作(控制器)。有时,它可能会像第一种情况一样直接转发到另一个视图。

模型中的多个对象相互通信没有问题。事实上,这将是很常见的。在我看来,模型中的所有对象就像一个组件来表示数据和对数据的操作。

这篇文章可能会有所帮助。和这个