【问题标题】:How to communicate different modules working with MVC如何与使用 MVC 的不同模块进行通信
【发布时间】:2013-09-13 17:31:54
【问题描述】:

我正在尝试使用以下结构来实现 MVC

Structure

每个模块都有一个控制器、一个视图和一个模型。

我不知道如何创建不同模块之间的通信。例如,如果我在 Module1 的模型中运行一个函数,并且我需要得到 Module2 模型的一些东西(为了符合 MVC),我该怎么做?正确的做法是什么?

我的想法是这样:模块1的模型->模块1的控制器->模块2的控制器->模块2的模型->模块2的控制器->模块1的控制器->模块1的模型

【问题讨论】:

  • 控制器永远不需要相互通信 - 而是将您的共享逻辑移动到共享库。
  • "MVC" 不代表“我的代码”。它是一种架构设计模式,而不是文件的命名约定。
  • 您可以将模块视为事件。这基本上是实现您所需要的最简单的方法。看看这个:stackoverflow.com/a/17377708/1208233

标签: php oop model-view-controller module


【解决方案1】:

模型-视图-控制器不只是 MVC,但正如戴所说,您还需要包含共享逻辑的库部分。

或者,如果一个控制器是从另一个控制器派生的,并且您正在使用面向对象编程,您可能只想扩展其中一个控制器。例如。有一个“安全页面” 控制器用于登录用户,并具有像“userPanel”和“myProfile”这样的控制器 扩展securePage控制器。

或者,同时使用。为您希望在任何地方使用的函数提供通用库,然后使用类继承来提供专门的函数。

【讨论】:

  • -1:短语“模型-视图-控制器不仅仅是 MVC”和“包含共享逻辑的库部分”没有任何意义。控制器的职责是更改状态,而不是执行访问控制。
  • 它们在一起确实有意义。我是说 MVC 模型可以包含库之类的东西,并且不绝对限于这 3 种类型的组件。我对他的问题的理解使我相信他认为该模型是绝对死板的,不允许使用库。根据控制器的职责,它们是 MVC 的逻辑部分;访问控制不属于模型,视图也不合适。有一个父控制器可以为他们的孩子自动验证挑战是有意义的;控制器中的访问控制!
  • @user870018 听起来你在谈论Model-View-Presenter。从 Presenter 调用访问控制。控制器也称为 Editors(参见原始 MVC 论文)——它们应该只关心请求变量,例如 $_POST$_GET ...
猜你喜欢
  • 2021-06-25
  • 2016-01-21
  • 2013-10-04
  • 1970-01-01
  • 2016-12-30
  • 2018-07-09
  • 2015-02-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多