MVC 与前端控制器混淆



** 简化问题 **

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

特别是我对前端控制器是否应该启动整个三元组感到困惑,或者前端控制器是否只是调用控制器,其余部分由其他部分完成。

我注意到像路由、路由器和引导这样的类,我想知道这些特定的类做什么以及它们是否依赖于前端控制器本身。

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

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

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

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

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

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

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

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

你也应该这样做。我想说的是:不要试图一次构建下一个Ultimate SymZendCakeIgniter PHP框架。慢慢来,花时间阅读,花时间学习。看在上帝的份上:*甚至在阅读任何关于设计模式的内容之前,请买一本关于T-E-S-T-I-N-G的好书

我希望我有用。

相关内容

  • 没有找到相关文章