【问题标题】:PHP: code design dilemmaPHP:代码设计困境
【发布时间】:2010-11-22 17:16:41
【问题描述】:

这是一个没有真正问题的问题,只是我病态的头脑和驱使事情变得有点奇怪的产物:)

所以,我在我自己的面向 MVC 的框架之上构建了这个 PHP 应用程序(是的,我做了自己的,而不是使用现有的)。它是由本书完成的,所以我们有模型(数据和数据库操作)、视图(填充数据和渲染输出的模板)和控制器(处理请求、从模型中获取适当的数据、将数据放入视图)。使用 .htaccess 规则完成请求路由的经典而无聊的场景。

昨天我对我的代码进行了一些更改、错误修复、一些改进等。我强烈希望重新安排控制器的代码。他们感觉有些沉重和臃肿,而且方法的数量使得在文件中导航变得困难,诸如此类。我相信每个人都知道我在说什么。

我正在考虑将我的控制器类分成许多类,每个类只处理一种类型的请求,例如登录或注册或 showProfile 或 killMe。

现在控制器类具有对应于部分用户友好(或者可能是 SEO 友好)url 的公共方法,并且路由类根据 url 内容调用适当的控制器及其方法。

我正在考虑的更改是将一些路由机制转变为调用特定控制器及其 Execute() 方法。

例如,对于 url = "www.example.com/users/login" 现在看起来像这样:

$controller = new url[0]();
$method = url[1];
echo $controller->$method();

现在 url 将更改为“www.example.com/login”,并且路由代码如下所示:

$controller = new url[0]();
controller->Execute();

我省略了解析 url 并从中提取路由信息的部分,因为这与我的问题无关。

我从这种变化中看到了什么好处?

  • 每个请求一个专用类
  • 较小的文件
  • 更小的代码
  • 更容易维护
  • 添加新功能(新类型的请求)或修复错误时破坏工作控制器的风险有限

缺点?

  • 可能有很多类
  • 可能会影响性能
  • ???

我的问题是关于你如何看待这个想法,它是否有任何意义。当然,我更感兴趣的是为什么我不应该这样做,而不是为什么应该这样做。因此,如果您能想到任何为什么这将是一个糟糕的想法和可憎的想法,请在为时已晚之前说出来:)

已编辑 澄清一个问题:

我在问我是否应该将通过它的方法处理多种类型请求的单个大控制器分解为许多小控制器,每个小控制器只处理一种类型的请求。

现在我有控制器用户来处理“login”、“showLoginForm”、“register”、“activate”等请求。重构的代码将由每个请求的单独控制器组成。

【问题讨论】:

标签: php class-design


【解决方案1】:

我能想到的旧方法和新方法的一个缺点是您将 url 直接映射到类名。如果您想更改 url,则必须更改类名。如果您想为不同的语言设置不同的 url,则必须添加一个图层,将 url 映射到类名。 这就是为什么我宁愿有一个路由类,它将 url 映射到类名,从而为您提供改变事物的接缝。

【讨论】:

  • 好点。我可能应该考虑将 url 与处理它们的实际代码分开,当前映射不是很灵活
  • 我接受这个答案,因为这正是我在代码中所做的,它解决了我在写这个问题时遇到的所有疑问和问题:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-19
  • 1970-01-01
相关资源
最近更新 更多