`
bardo
  • 浏览: 372819 次
  • 性别: Icon_minigender_1
  • 来自: 上海
博客专栏
D1407912-ab64-3e76-ae37-b31aa4afa398
浅述PHP设计模式
浏览量:11641
9d6df9f7-91da-3787-a37c-0e826525dd5d
Zend Framewor...
浏览量:9994
85b628bd-a2ed-3de2-a4b1-0d34985ae8b6
PHP的IDE(集成开发环...
浏览量:9353
社区版块
存档分类
最新评论

Zend Framework的缺陷(连载之4)

    博客分类:
  • PHP
阅读更多
    上一节我们说到,Zend Framework中的一些代码是相当初级的,但我们只是举了控制结构的使用。现在我们来给出真正的代码实例。也许,你马上会说,这不仅是初级代码,简直就是垃圾代码。我敢打赌,你会有这样的感受。
     这里我们要说的是Zend_Date。如果你没能看过这个类的代码,那好,现在我建议,你最好先打开看一下。我们的打开library\Zend\Date.php.
    下面我来跟您讲一下,这个代杩为什么垃圾。首先,作者试图要把我们对 Datetime操作的需求完全收录到这个类中,提供完全的代码给大家使用。这也许是好事。但如果你看一下代码,就会发现,作者试图包办一切。并且,某种程度上,我不得不说,作者的真实意图,是在摆显,他有多大能耐。然而,可悲的是:越是摆显,越是让我们发现,作者是如何初级。
     整个类有近5000行的代码,可见作者的“良苦用心”!!!此类中一个方法:function _calculate,这个方法的长度居然近1400多行。作者怪异地把 'add'|'sub'|'cmp'|'copy'|'set' 这五种运算合并到一个方法中。完全违背了一个函数做一个事的基本原则。而且,用户面临的是什么?无法对此函数产生信任。因为,这行长的代码,根本不是一两下子能够看懂看完的。记得一次微软公司的开发讲座上,说到微软公司要求每一个函数最长不能超过140行。试想,如果这个函数出错,(BUG总是难免的)那么,你必须得花时间弄懂这1400行代码。(上一节我们说了switch case控制结构,这个类中,可能是全框架用switch case控制结构最多的。)
    反过来,如果我们把这些运算分开来,日期时间的操作,只要用户了解相关函数,分多行代码操作,那代码量会少得多,而不会背上这么多的又臭又长的垃圾代码!!Zend Framework有40M代码,不难想象,40M的代码,其中含了多少垃圾,由这一类原因造成的代码长度超标肯定不只这里一处!
    比如,我们写个DateAdd函数,不超过10行代码就可完成:
	function dateAdd($interval, $number, $date=null, $format="Y-m-d"){ 
		$date=($date?$date:date("Y-m-d"));
		$interval_param=array("s"=>1,"n"=>60,"h"=>3600,"d"=>86400,"ww"=>604800,"m"	=>'',"yyyy"=>31556952); 	
		if ($interval != "m")
			return date($format,strtotime($date)+$interval_param[$interval]*$number); 
		else{
			$dt_arr=getdate(strtotime($date));
			return date($format,mktime($dt_arr[hours],$dt_arr[minutes],$dt_arr[seconds],$dt_arr[mon]+$number,$dt_arr[mday],$dt_arr[year]));
		}
	}


    而且,我们可以看出,代码易懂,用户易于信任。从这一点看出,Zend Framework作为官方的PHP框架,这种缺陷是致命的。尽管我们清楚, Zend Framework的目标是挤掉所有非官方的框架。但从现实情况看,他们是在做梦!!
1
1
分享到:
评论
4 楼 bardo 2010-06-16  
yibn 写道
看了你的Zend Framework的缺陷连载,因为最近也在开发一个框架,原因是以前用过的几个框架都不满意,其中包括zend,学习的成本太大,还有一点就是性能问题.

另外有点疑问:switch case确实有硬编码的问题,但不至于对它对此极端吧?适当时候它也有自己的妙用的.

switch case 在封闭的结构数据中确实可以用的。但问题是我们需要判断,哪些是封闭的,哪些是开放的?同时,switch case结构,如果case太多,则程序会变得相当难懂的。同要也需要使用不设计模式取代。
3 楼 yibn 2010-06-16  
看了你的Zend Framework的缺陷连载,因为最近也在开发一个框架,原因是以前用过的几个框架都不满意,其中包括zend,学习的成本太大,还有一点就是性能问题.

另外有点疑问:switch case确实有硬编码的问题,但不至于对它对此极端吧?适当时候它也有自己的妙用的.
2 楼 alan.hee 2010-05-23  
not bad!
1 楼 JetMah 2010-05-15  
这个连载4貌似说的跟连载3一个问题,知不是这里举了个具体的例子而已,呵呵。
不过拍的很好,继续拍~~

相关推荐

Global site tag (gtag.js) - Google Analytics