MVC与前端控制器混淆

时间:2013-11-08 20:45:23

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

**简化问题**

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

特别是我对前控制器是否应该启动整个三重奏或前控制器是否只是调用控制器以及其他部分是否完成其余操作感到困惑。

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

1 个答案:

答案 0 :(得分:2)

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

1)“我正在学习OOP模式”:模式在错误的手中同样具有危险性。我想说的是你应该开始构建你的fw,而不是试图使用你遇到的所有模式只是因为它被大的使用或谈论。您可以重构稍后为每个步骤提供更高级别的抽象:这自然会涉及使用您将要阅读的模式以及更好地理解它们。

2)“对前控制器是否应该启动整个三重奏”感到困惑“:这取决于你想要在你的mvc中使用哪种耦合。 您可以让Front Controller处理以下所有内容:

  1. bootstrap:加载配置并实例化数据库连接等等
  2. 请求:获取描述所询问内容的所需数据
  3. route:处理请求
  4. 回复:回复问题
  5. 但是,如果在其他地方需要配置怎么办?也许在CLI运行脚本中?您将自然地从路由器中分离引导程序组件,以便在需要的任何其他地方使用它。其他组件也是如此。

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

    我在说话,因为在创建你正在谈论的内容之前,我一直走在那条路上:https://github.com/OverKiller/PHP-Router

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

    你应该这样做。 我想说的是:不要试图同时构建下一个Ultimate SymZendCakeIgniter PHP框架。 慢慢来,花点时间阅读并花时间学习。 为了上帝的缘故:*甚至在阅读有关设计模式的任何内容之前,都会得到一本关于 T-E-S-T-I-N-G

    的好书

    我希望我有用。