上一节我们讲的是Zend Framework中相对于基本编程规范的违规。也许有人会说,这种违规是可以忍受的。代码中一些地方的烦琐有时是必须的。我们可以接受这样的不同意见。那么,如果一个框架在面向对象的基本原则中违规,那你还可以忍受吗?
设计模式和代码重构理论,是基于基本的面向对象的基本原则。这里我们有必要先讲一下这些基本原则:
开闭原则(OCP):对可变性进行封装。对象必须能对自己负责。这与单一职责的原则是完全一致的。
里氏代换原则(LSP):如何进行继承。继承必须维护遗传。而不能产生变异。这里的变异是指破坏了原有的结构与数据关系。
依赖倒转原则(DIP):要针对接口编程。不要针对实现编辑程。抽象不应当依赖于细节;细节应当依赖于抽象。
接口隔离原则(ISP):恰当地划分角色和接口。使用多个专门的接口比使用单一的总接口要好。
合成/聚合复用原则(CARP):尽量使用合成、聚合,尽量不使用继承。继承是“Is-A”关系。合成/聚合是“Has-A”关系。
迪米特法测(LoD):不要和陌生人说话。即:不存在对间接关系类的任何操作。
这六大原则,相对于初学者,也许过于抽象。不过,不要紧,我们下面的缺陷分析,有助于你对这些原则有一些具体的认识。
假如你是一个系统架构师,那么,你现在也许会说,我说的情况,在Zend Framework中根本不存在。
那么,我们还是从更具体的实例进行分析吧。
Zend Framework中有很多地方完全属于烂用依赖倒转原则(DIP)。简单来说,假如变化本身,只是一个方法,一个函数,相对于PHP,我们根本不需要使用依赖倒转原则为此定义出一个接口,并让用户去写只有一个方法的类,产生一堆这样的类文件。
一个实例:Zend Framework中的Filter类,就是这种不良代码的典型!!这样做的坏处,那就是,变化的一切均分布在不同的类中。不仅不易于管理,同时也影响效率。另一方面,PHP5,提供了 __call, call_user_fuc, call_user_fuc_array, 所有这一切,均是为给这一种特别的聚合提供方便。凭错这些,我们可以直接增加函数列表,而函数列表,相对于代码管理,更加方便,并且,单一方法上的添加,可以直接使用继承法。但直接继承的结果,则是破坏了类与类之间的偶合。但如果是真的松耦合,那继承就没有什么关系。
一种放松耦合的实现方式,即使用相关的配置,并使用createInstance一类的方法,创建指定的类的实例,这可能是一种高难度。一般架构师或程序员不一定能设计出这样的代码。
最后,还需要说的是, Zend Framework中的Filter类即便是目前这样,也应当写得更好,Filter现在是把Filter与validate给混淆了。同时,所谓的链式操作,实际仍是不方便的操作,PHP函数,原本就可以接受不定数量的参数,所以,完全可以不用链式操作,而一次性传入所有要过滤的类型。但它没能做到。再有就是,输入与输出,原本应当要分开的,但却也是搅合在一起。假如,一个编辑器,输出是的 23,456,321这种格式的数字,表单提交后,用户很容易会直接使用整数过滤器。则肯定会出错。
Zend Framework中实际这样的实例是相当多的。这里就不多说了。
附:非常高兴,已经看到有人拍砖了,参见:
http://www.netroby.com/article-1706.html
由此:这里需要声明一下:此文的目的,不是为了抵毁Zend Framework,而根本的目的,是在于两点:其一,教会大家,如何选择自己合适的开发框架;其二:让一些“框架开发者”清楚,一个框架究竟要做成什么样子。特别是,国内那些希望自己的框架能够拥有用户的开发者。很多是不了解一个大型企业开发的实际需求,闭门造车。个人观点,一个真正完全了解Zend Framework缺陷的人,才能开发出有拥户的有技术含量的框架,如同CI架构,确实是改观了一种缺陷,但只能用于小型网站,或许,它的定位就是如此。但如果拿它与Zend Framework相比,它就是一种玩具! 第三,我所识为的缺陷,也很可能是认识上的误区。因而,在此能引得同道的共同探讨,则有利于彼此的进步。
所以,继续希望有人拍砖,但骂街性质的,强词夺理的(比如:说什么Zend Framework2.0肯定会改掉这些缺陷等观点),本人不会理会。所以只能说声抱歉。
热烈欢迎一切理智的技术讨论。
分享到:
相关推荐
Table of Contents •Introduction to Zend Framework •Overview •Installation •Learning Zend Framework •Zend Framework Quick Start •Autoloading in Zend Framework •Plugins in Zend Framework •...
Whether you are learning Zend framework from scratch or looking to sharpen up your skills from previous versions, Zend Framework 2 Application Development will help you to harness the power of Zend ...
ZendFramework-1.10.4
Zend Framework 2 官方教程汉化版
zend framework中英文手册,包含中文手册,英文手册两个版本。
Zend Framework 中文 手册 2008年12月01日.chm MD5: DD29C39D12E9C0B38FD3475A12D05B73 SHA1: 1A6BBBF9311013F2FF2BF97752332160ED767526 CRC32: 88210ABD Zend Framework 入门教程(简体中文1.52版)v0.12.pdf MD5:...
zend framework zendframework manual 手册,Zend Framework手册 中文版,有一部分还没有汉化
PHP zend framework 教程 很好PHP zend framework 教程 很好PHP zend framework 教程 很好PHP zend framework 教程 很好PHP zend framework 教程 很好PHP zend framework 教程 很好PHP zend framework 教程 很好...
zend framework zend framework zend framework zend framework zend framework zend framework zend framework
这是基于Zend Framework 框架的CMS PHP 源代码。 安装时请下载Zend及zendx并将其放在library下。
Zend Framework 3 Developer's Guide 英文azw3 本资源转载自网络,如有侵权,请联系上传者或csdn删除 查看此书详细信息请在美国亚马逊官网搜索此书
zendframework1.9中文版用户手册 直接从网站上下载的离线版本 非常方便 这个是.chm的 还有.exe的版本,方便大家使用。
ZendFramework 1.12.9 代码和文档.rar
Zend Framework 3 Developer's Guide 英文epub 本资源转载自网络,如有侵权,请联系上传者或csdn删除 查看此书详细信息请在美国亚马逊官网搜索此书
ZendFramework安装1.11版 ZendFramework安装1.11版
自己编译的里面包含 ZendFramework 1.11.4 中文帮助手册 ZendFramework 1.11.4 api doc ZendFramework 1.11.4 的一个guestbook。 想要就下,不想要就看看.
ZendFramework1.7.5 ZendFramework1.7.5 ZendFramework1.7.5 ZendFramework1.7.5 ZendFramework1.7.5
zend framework手册,英文版,学习php最好的框架zend framework必备
zend framework1.0 中文教程
zend framework 中文手册,详细为你讲解zend framework使用