php - MVC 与前端 Controller 混淆

标签 php model-view-controller front-controller

** 简化问题 **

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

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

我注意到像路由、路由器和 Bootstrap 这样的类,我想知道这些特定类的作用以及它们是否依赖于前端 Controller 本身。

最佳答案

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

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

2)“对前端 Controller 是否应该启动整个三元组感到困惑”:这取决于您想要在 mvc 中实现的耦合级别。 您可以让前端 Controller 处理以下所有事情:

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

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

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

我这么说是因为在创建你所说的内容之前我已经沿着这条路走了:https://github.com/OverKiller/PHP-Router

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

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

的好书

我希望我有用。

关于php - MVC 与前端 Controller 混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19868206/

相关文章:

model-view-controller - KO3 : How to deal with stylesheets and scriptfiles

.htaccess - 如何将所有请求重定向到文件,除了使用 Apache 的图像?

php - Magento 查询速度慢

php - 为什么 jQuery 使用 UTF-16 进行 POSTing?

php - 当 Code Igniter 中没有更新时,如何测试我的 MySQL 更新查询是否成功?

php - 有人可以帮助我解决此错误消息吗?我无法弄清楚

html - 如何将所需的 HTML 属性正确设置为 TymeLeaf 页面中的输入标记?

javascript - "styling"代码在 MVC 模式中去哪里?

controller - 如何在 prestashop 1.5 中覆盖 FrontController?