Zend Framework和Struts2
POJ是我们实验室的项目,现在的POJ基本上还沿用了2003年时的Serverlet代码结构,没有任何框架,视图和控制器都混在一起。这个学期打算要重构POJ,于是我就开始纠结到底用什么MVC框架。
摆在我面前的选择有这么几个:
asp.net
php, Zend Framework框架
Java, Struts2框架
Python, Pylons或者Django框架
我是Linux爱好者,所以首先排除asp.net。Python其实是一门很优秀的语言,面向对象做得很彻底,可以和各种其他语言粘合,两个热门框架也很不错。但是一方面我对python非常不熟悉,另一方面python的框架更新速度非常缓慢,近一年只更新了0.0.1,我对它的发展前景表示担忧,再加上中文资料太少,所以遗憾的排除。真正让我纠结的是Zend Framework和Struts2这两个框架。这两个框架我都使用过,感觉各有利弊。POJ本来的代码基于Java,因此重构的时候可以省一些事情。而图虫整个项目都是用Zend Framework,我对php和Zend Framework了如指掌,可以省却许多学习过程。但这都不足以说服我做出选择,还是比较一下框架之间的特性吧。
php是动态脚本语言,在许多时候更加灵活。
php是弱类型的,在变量处理的时候省却许多类型转换的麻烦。
php不需要声明变量,大大减少代码量
Zend Framework更加灵活,可以按需取用(use as wish),对于效率低下的部分,可以自己写代码替换。而Struts的框架核心代码则相对封闭
Zend Framework自己就提供了功能库,方便调用各种Web Service。
apache + php的结构更加便于热部署,只需要在服务器上svn update就可以了;而Java必须编译一下。这同时也有利于调试过程。
php在任何地方都可以得到所需要的变量,在任何地方都可以执行任何函数或方法
php有大量的开源项目,可以参考他们的代码,比如wordpress, joomla, phpBB, drupal, discuz, mediawiki;而Java的开源web项目,我一个都不知道
php有许多超大规模网站的成功案例,比如:facebook,yahoo,wikipedia,baidu等;而Java,除了一个从网,我就不知道别的了
struts2需要外加数据模型库,比如hibernate,非常不喜欢hibernate生成代码的方式,我认为hql完全没有必要;而zend Framework自己就提供了数据接口
struts2的标签库完全是鸡肋
struts2的布局系统需要外加别的模板库,比如sitemesh。而Zend Framework自己就能搞定
php更加轻量,执行速度更快。而且很鲁棒。不会像JVM,因为一个Servelet挂掉而当机
Java 的代码过于复杂,大量无聊的getter和setter简直是一场噩梦。做一件简单的事情也必须牵涉到几个对象和函数
Zend Framework很年轻,开发远比Struts活跃。Zend Framework在一年内,从1.5升级到了1.9,期间包括近30个小版本,而Struts2在一年内仅仅从2.1.6升级到了2.1.8
php今年来发展势头非常好,远比Java更活跃;Java在Sun被收购之后,各种改进明显受到影响
总结起来,我们就能发现。php是为web而生的,各种特性都是为web而设计,web需要小巧,轻量,敏捷开发,php都能满足。而Zend Framework的诞生则让php的生命力在企业级应用上得以延续。而Java本来并不是为web而设计的,它过于笨重,在J2EE开发上有明显优势,但是对于web项目,未免有些杀鸡用牛刀。所以,最终我还是选择了Zend Framework。