5

在我实施 MVC之前,我寻求正确理解 MVC 的第三个问题:

我想到了两种情况:

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

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

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

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

从更广泛的角度来看,如果有人有显示这些 MVC 问题的典型方法的链接,我很乐意看到它。我没有太多运气找到可靠的、重要的参考资料。Python 中的示例会很可爱,但我很乐意阅读任何内容。

编辑 1

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

4

3 回答 3

4

关于 (1),视图不调用其他视图。它们调用可能导致呈现其他视图的控制器操作。在您的情况下,主应用程序窗口包含一个用户界面元素(按钮、链接),该元素调用控制器操作来显示首选项窗口。

关于(3),模型组件当然可以相互关联。这不是意外,也不是必须避免的。例如,您的 Customer 模型可能有一组关联的 Orders。通过 Customer 类中的方法访问客户的订单是非常自然的。

您可能想查看 wikipedia 上的MVC 页面以获得概述。

于 2008-10-22T23:58:01.740 回答
2

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

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

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

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

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

于 2008-10-22T23:53:59.097 回答
0

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

于 2008-10-23T00:05:55.143 回答