2

** 简化问题 **

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

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

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

4

1 回答 1

3

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

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

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

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

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

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

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

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

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

我希望我是有用的。

于 2013-11-08T21:58:16.187 回答