代码之家  ›  专栏  ›  技术社区  ›  grapkulec

PHP:代码设计困境

  •  0
  • grapkulec  · 技术社区  · 15 年前

    这是一个没有实际问题的问题,只是我病态思维的产物,让事情变得有点怪异:)

    因此,我在自己的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”等请求的控制器用户。重构的代码将由这些请求的单独控制器组成。

    1 回复  |  直到 15 年前
        1
  •  0
  •   Shahar    15 年前

    我能想到的旧方法和新方法的一个缺点是,您直接将url映射到类名。如果要更改url,则必须更改类名。如果您希望不同语言有不同的url,则必须添加一个层,该层将url映射到类名。 这就是为什么我宁愿有一个路由类,它将url映射到类名,类名为您提供了一个seam来改变事情。

    推荐文章