这是一个没有实际问题的问题,只是我病态思维的产物,让事情变得有点怪异:)
因此,我在自己的MVC面向框架之上构建了PHP应用程序(是的,我自己做的,而不是使用现有的)。它是由书完成的,所以我们有模型(数据和数据库操作)、视图(充满数据和呈现输出的模板)和控制器(处理请求、从模型获取适当的数据、将数据放入视图)。使用.htaccess规则完成请求路由的经典而乏味的场景。
昨天,我对代码做了一些修改,错误修复,一些改进,等等,我强烈希望重新安排控制器的代码。它们感觉有点沉重和臃肿,而且方法的数量使得在文件和类似的东西中导航变得很困难。我相信每个人都知道我在说什么。
我正在考虑将我的controller类分成多个类,每个类只处理一种类型的请求,比如login、register、showProfile或killMe。
现在,controller类有对应于用户友好(或者SEO友好)url的部分的公共方法,routing类根据url内容调用适当的controller及其方法。
我正在考虑的改变是将一个小小的路由机制转换为调用特定的控制器和它的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”、“showlognform”、“register”、“activate”等请求的控制器用户。重构的代码将由这些请求的单独控制器组成。