【问题标题】:MVC with a front controller confusionMVC 与前端控制器混淆
【发布时间】:2013-11-08 20:45:23
【问题描述】:

** 简化问题**

我正在学习 oop 模式,并希望构建自己的简单 mvc 框架。我希望它有一个前端控制器,但我发现很难找到任何可靠的信息来实现带有 MVC 的前端控制器。

我特别困惑的是前端控制器是否应该启动整个三元组,或者前端控制器是否只是简单地调用控制器而其他部分完成其余的工作。

我注意到路由、路由器和引导程序等类,我想知道这些特定类的作用以及它们是否依赖于前端控制器本身。

【问题讨论】:

  • 就我而言,权威来源是PoEAA,值得拥有的好书。看了other MVC frameworks,他们是怎么做到的?此外,几年前这对我来说是一本好书:survivethedeepend.com/zendframeworkbook/en/1.0
  • 这篇文章有 9 个不同的问题。
  • 我认为这个链接会是一个好的开始:net.tutsplus.com/tutorials/other/mvc-for-noobs
  • 那篇文章中的 mvc 图声称模型与控制器来回交互——我认为这不应该发生。我主要是对与前端控制器的集成感到困惑,而不是对mvc的理解。
  • @JorgeCampos 这实际上是一篇非常糟糕的文章。

标签: php model-view-controller front-controller


【解决方案1】:

实际上这不是一个问题,您只是想获得有关如何在构建自己的 MVC 框架时继续进行的建议。 因此,我将尝试提供与您的问题一样通用的答案/考虑因素。

1) “我正在学习 OOP 模式”:模式在坏人手中既强大又危险。我想说的是,你应该开始构建你的 fw,而不是试图使用你在网络上遇到的每一种模式,仅仅因为它被大公司使用或谈论过。您可以重构以后编写代码,为每个步骤提供更高级别的抽象:这自然会涉及使用您将要阅读的模式并更好地理解它们。

2) “对前端控制器是否应该启动整个三元组感到困惑”:这取决于您希望在 mvc 中拥有的 耦合 级别。 您可以让您的前端控制器处理以下所有内容:

  1. bootstrap:加载配置和实例化数据库连接等等
  2. 请求:获取描述所询问内容的所需数据
  3. 路由:处理请求
  4. 响应:返回所询问的内容

但是如果其他地方需要配置怎么办?也许在 CLI 运行脚本中?您将自然地将引导程序组件从路由器中分离出来,以便在需要的任何地方使用它。其他组件也是如此。

3) “路由、路由器和引导程序等类”。 想象一下让你的大班处理一切。您将如何测试您的方法?您会手动调用具有不同输入的脚本吗?每个测试方法都必须同时检查输入、路由和输出吗? 为前端控制器中涉及的每个组件提供一个抽象级别,将其封装在适当的类/对象/模块中,将为您提供更好的测试能力。

我之所以这么说,是因为在创建您所说的内容之前,我一直在走这条路:https://github.com/OverKiller/PHP-Router

但我不得不面对严格的测试能力和深度耦合。 我很快就会重写它,抽象出请求、路由和响应组件。 但我有我的经验,我为此感到自豪!

你也应该这样做。 我想说的是:不要一次尝试构建下一个 Ultimate SymZendCakeIgniter PHP 框架。 花点时间,花点时间阅读,花点时间学习。 看在上帝的份上:*即使在阅读有关设计模式的任何内容之前,也可以阅读一本关于 T-E-S-T-I-N-G

的好书

我希望我有用。

【讨论】:

  • 感谢您的建议,这帮助我了解我需要做什么才能继续前进。
猜你喜欢
  • 1970-01-01
  • 2015-02-19
  • 1970-01-01
  • 2017-04-09
  • 1970-01-01
  • 1970-01-01
  • 2014-04-16
  • 2015-11-05
  • 1970-01-01
相关资源
最近更新 更多