• CakePHP的坏味道_老王的技术手册 ( 我的新博客:http://huoding.com )_百度空间


    CakePHP的坏味道_老王的技术手册 ( 我的新博客:http://huoding.com )_百度空间

    CakePHP的坏味道
    2008年09月30日 星期二 下午 3:57
    作者:老王



    CakePHP成为PHP社区里最流行的框架,并不是因为CakePHP本身做得如何如何好,而是因为其他框架做得太差。CakePHP本身缺点多多,下面简要阐述一些CakePHP的坏味道:



    * Route配置文件的膨胀

    CakePHP的缺省实现中,我们并不用去设置Route,系统会遵循/controller/action/param的形式去解析URL。但是很多时候这样的URL并不友好,于是我们就要设置自定义的Route,其结果就是Route配置文件不断膨胀。值得注意的是PHP对于每个请求都要重建运行环境,而对于一次请求而言,Route配置文件里最后使用的只是一条配置而已,为了这一条配置,却不得不重复解析整个庞大的Route配置文件,无疑是个巨大的负担。REST风格是解决这个问题的好办法,采用REST风格的架构方式,资源的URL形式相对确定,操作方式由HTTP方法而定,因此Route配置文件会迅速瘦身,但是目前CakePHP的REST比较弱。



    * Redirect中断控制器运行

    CakePHP的redirect方法(redirect($url, $status = null, $exit = true))在CakePHP里被用来做跳转。乍一看起来这无可厚非,但是需要注意的是redirect方法执行之后会硬性的exit。不管你的脚本后面还有什么代码,都不会再被执行。这无疑是个大问题,先不说我们无法再使用装饰模式,至少程序的可测试性降低了。虽然可以用一些Hack方法来规避这个问题,但毕竟是旁门左道。合理的解决方式应该是创建一个Response对象,如果要重定向请求,无非就是给Response对象设置一个301/302,然后return,而不是exit,最后在前端控制器里完成真正的重定向。



    * MVC划分不明确


    CakePHP的MVC模型含糊不清。M依赖V:比如tree行为的generatetreelist方法,硬性的通过“_”符号来表现层次关系,实际上tree行为的generatetreelist方法就应该仅仅返回一个数据结构,至于用什么来体现层次关系,是V的事情。再比如model中的验证部分(error message)掺杂了i18n,实际上M不应该掺杂验证具体的错误信息是什么,取而代之的应该抛出一个验证异常,文字描述让V根据异常的具体类型去表述。C依赖V:在C里设置pageTitle,这明显是V的职责,还有当同时支持多种表现形式(html, json, xml)时,C里出现if/else的坏味道也证明了C依赖于V。



    ===============================================



    后记:phramemojavi等早已绝迹的框架有死灰复燃的迹象。PHP框架的战国时代远未结束。
  • 相关阅读:
    每天一个设计模式(2):观察者模式
    每天一个设计模式(1):策略模式
    每天一个设计模式(0):设计模式概述
    常量池、栈、堆的比较
    常量池小结
    Java虚拟机体系结构分析
    Java并发(3):volatile及Java内存模型
    第一题:Big Countries
    22 高级SQL特性
    21 使用游标
  • 原文地址:https://www.cnblogs.com/lexus/p/2413717.html
Copyright © 2020-2023  润新知