小议 Zend Framework 的三宗罪

原文在此:http://hi.baidu.com/thinkinginlamp/blog/item/6282d539d96198f13a87ced1.html

在这里对有效内容略做剖析,谈谈我的看法。另:为避免被“河蟹”,所以原文中那另外的 50% 的废话我就不说了。

第一宗罪:言而无信

原文:Zend Framework也是一样。在Zend Framework发布之前,曾给广大PHPer画了一个看上去很美的饼:一个ActiveRecord的PHP实现。可当Zend Framework发布之后大家才发现,这不过是一 个很普通的DAO实现罢了,不是说DAO实现就差劲,但是作为“官方”,不能信口雌黄。最近,越来越多的开发者开始认为Zend Framework已经不是框架,而是一个类库的集合,面对这种情况,Zend Framework团队出来辟谣说绝对不会。我们是否还应该相信他们的话呢?!”

对于开源世界,跳票的事情是屡有发生。比如 FreeBSD 啦、Debian 啦……我是习惯了。Zend Framework 发布之前确实曾经制定过一些目标,发布 1.0 的时候没有实现。不过,我不认为 zf 1.0 就是 final 版本,我也不认为 Active Record 在被列为淘汰技术之前没有可能在 zf 中实现。至于类库集合这个说法……什么是框架?什么是类库集合呢?如果不解释清楚这两个概念,那多说无意啊。pear 所出现的麻烦就是结构混乱,耦合高。你要用一个包,可能关联的包就有十个八个。很难单独的将一个包提取出来。而类库集合,很多开发有个两三年的朋友手头都有。雪藏的一些好用的包,平时不给人看,关键时刻那是用来当大侠的资本呢。但是这些雪藏,相互之间没有关联,确实底耦合,不过要放在一起用用……嗯,嗯……还是要花点心思的。

第二宗罪:不自量力

原文:Zend Framework也是一样。打开Zend Framework的软件包,里面能找到各种各样的类库:如制作pdf的类库,还有诸如Akismet, Amazon, Audioscrobbler, Delicious, Flickr, Simpy, StrikeIron and Yahoo!等WebService相关API。这是框架该做的事情么?就算做好了,以后能保证长期维护它们保持稳定安全么?更重要的是,这里面相当一部 分功能都是和Pear或者其他开源类库功能重复的,面对重复发明轮子的行为,我们总是要发出疑问的,Zend你为什么要这么做?难道你想剿灭Pear,建 立大东亚共荣圈?!

貌似,这个说法我不是第一次听说了。Zend Framework 含有大量看似无关紧要的内容。其实 Zend Framework 自身的松耦合也允许使用其他任何包进行扩展。这可比其他耦合度相对高很多的框架来说要强一些了。比如如果使用 log4php 和 自己写的数据库类进行开发,许多现在流行的框架都将死掉。因为,你根本无法将数据库类从框架本身剥离。或者剥离以后,框架所剩无几了。而重复 pear包或者其他一些开源项目的内容,就我的理解,主要是 go to php5。 pear 中的大部分包(应该说所有的)都不是按照 php5 的语法进行编写的。再说了,多一个选择不是更好?为什么自己在不断重复造轮子的时候,不允许别人也过过瘾呢?而且,就 zf 开发组从来没有用什么”官方“,”权威“之类的发表过任何东西。倒是国内一些别有用心的人,不时的把这些词和 zf 拉扯到一起。何来共荣圈?别紧张,不是说你。^_^

第三宗罪:自欺欺人

原文:Zend Framework也是一样。在这个号称官方的MVC框架中,我们看不到M在哪里。或者说Zend Framework的M相当松散,它推崇的理论是胶水概念,M里用什么就拿过来粘上,好像盖房子一样,一块砖一块砖的垒,中间用泥巴粘上,但是别忘了,现 在盖大楼都是钢筋混凝土结构了。虽然Zend Framework追求的就是All In One的效果,但是恰恰在这一点上,它缺失了最重要的东西,抛开它类库的嫌疑不说,即便算它是框架,也不过是一个先天残疾的框架。

许多人的概念中,MVC 框架就是有 M 有 V 有 C。缺一不可。恩,我之前也是这么想的。但是话说回来了,这个 M 可是模型啊,除了数据模型还有业务模型等等。框架怎么能知道你需要什么样的模型,你需要的模型应该是什么样?说实话,许多人在开发做完了都不知道自己项目中的模型应该是怎么样。许多人指责 zf 说缺失 M 部分。但是我压根没想明白,哪个框架是有完整的 M 呢?如果有完整的 M 了,还要咱们这些编码工人做什么呢?呵呵,矛盾了不是?如果这里所谓的 M 就是指 RoR 之流,那是不是又太狭义了一些?

 

不少人说我是 zf 的铁杆。我不否认我很喜欢 zf。但是我不是铁杆。每天都能在 zf 中能找到大量的低级的编码错误就足以让我觉得:关爱生命,远离 zf。

我只是觉得,一些高手不应当用一些不负责任的言行来误导希望进一步学习的朋友。更不应当打着善意的旗号,做猥琐的事情。有不足,应当指出,而不是用一些大道理,高帽子来套。那样,世界上就没有任何一个框架有存在的必要了,不是么?

总之,愈加其罪,何患无辞?zf 确实有许多不足,但是不要一说就是”发展思路有些偏差“这样的大而空洞的泛泛之谈。这种话,看两篇技术文章,学两个时髦的词汇,就是一行代码没写过的人也会说。不如来一些更加实际的东西:xxx框架中是如何如何实现 xxxx,这样有 xxxx 的好处。而 zf 并没有这样实现,它是 xxxx 这样实现的,这样有 xxxxx 的坏处。或许更容易让我这样没事爱找茬的人闭嘴哦~~

Join the Conversation

3 Comments

  1. 先看过原文,觉得虽然用词欠妥,但也有一定的道理,觉得批评是帮助成长的动力。

    然后看了你的小议,觉得你将的更有道理,呵呵。

  2. 呵呵,我也就是说实话。不过说实话总要挨打~~~

    我是觉得总在这里打大旗,喊口号,很聒噪。
    不论是对 zf 本身,还是对其他框架,或者希望自己开发框架的朋友都没有什么帮助。
    “发展思路有些偏差”这个话本身很容易说出来,但是到底哪偏差了?
    原文的三宗罪在其他一些框架里也存在。
    这样写一篇针对 zf 的文章,有找茬干架的嫌疑,除了对原文作者的 blog 能贡献点 pv,其实对谁都没好处啊。

Leave a comment

Your email address will not be published. Required fields are marked *