这是一个没有真正问题的问题,只是我生病的心灵的产物,并且让事情变得有些奇怪:)
所以,我将这个PHP应用程序构建在我自己的MVC导向框架之上(是的,我做了我自己而不是使用现有的框架)。它由本书完成,因此我们有模型(数据和数据库操作),视图(填充数据和渲染输出的模板)和控制器(处理请求,从模型获取适当的数据,将数据放入视图)。使用.htaccess规则完成请求路由的经典和无聊场景。
昨天我对我的代码,错误修复,几个改进等进行了一些更改。我感到强烈要求重新安排控制器代码。他们觉得有点沉重和臃肿,许多方法使得难以浏览文件和这些东西。我相信每个人都知道我在说什么。
我正在考虑将我的控制器类分成许多类,每个类只处理一种类型的请求,如login或register或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();
我省略了解析网址并从中提取路由信息的部分,因为它与我的问题无关。
我在改变中看到了什么好处?
缺点?
我的问题是关于你对这个想法的看法,它是否有任何意义。当然,我更感兴趣的是为什么我不应该这样做,而不是为什么我应该这样做。所以如果你能想出任何理由,为什么那会是一个可怕的想法和憎恶,请在现在说出来为时已晚:)
EDITED 澄清一个问题:
我在问我是否应该打破我的单个大控制器,它通过它的方法将许多类型的请求处理成许多小型控制器,每个控制器只处理一种类型的请求。
现在我有控制器用户处理诸如“login”,“showLoginForm”,“register”,“activate”等请求。重构代码将包含针对每个请求的单独控制器。
答案 0 :(得分:0)
我能想到的旧方法和新方法的缺点是你将url直接映射到类名。如果您想更改网址,则必须更改课程名称。如果您想为不同的语言设置不同的网址,则必须添加一个层,以便将网址映射到类名。 这就是为什么我宁愿拥有一个路由类,它将url映射到类名,为你提供改变事物的接缝。