擺在我面前的選擇有這么幾個(gè):
- asp.net
- php, Zend Framework框架
- Java, Struts2框架
- Python, Pylons或者Django框架
我是Linux愛(ài)好者,所以首先排除asp.net。Python其實(shí)是一門(mén)很優(yōu)秀的語(yǔ)言,面向?qū)ο笞龅煤軓氐祝梢院透鞣N其他語(yǔ)言粘合,兩個(gè)熱門(mén)框架也很不錯(cuò)。但是一方面我對(duì)python非常不熟悉,另一方面python的框架更新速度非常緩慢,近一年只更新了0.0.1,我對(duì)它的發(fā)展前景表示擔(dān)憂(yōu),再加上中文資料太少,所以遺憾的排除。真正讓我糾結(jié)的是Zend Framework和Struts2這兩個(gè)框架。這兩個(gè)框架我都使用過(guò),感覺(jué)各有利弊。POJ本來(lái)的代碼基于Java,因此重構(gòu)的時(shí)候可以省一些事情。而圖蟲(chóng)整個(gè)項(xiàng)目都是用Zend Framework,我對(duì)php和Zend Framework了如指掌,可以省卻許多學(xué)習(xí)過(guò)程。但這都不足以說(shuō)服我做出選擇,還是比較一下框架之間的特性吧。
- php是動(dòng)態(tài)腳本語(yǔ)言,在許多時(shí)候更加靈活。
- php是弱類(lèi)型的,在變量處理的時(shí)候省卻許多類(lèi)型轉(zhuǎn)換的麻煩。
- php不需要聲明變量,大大減少代碼量
- Zend Framework更加靈活,可以按需取用(use as wish),對(duì)于效率低下的部分,可以自己寫(xiě)代碼替換。而Struts的框架核心代碼則相對(duì)封閉
- Zend Framework自己就提供了功能庫(kù),方便調(diào)用各種Web Service。
- apache + php的結(jié)構(gòu)更加便于熱部署,只需要在服務(wù)器上svn update就可以了;而Java必須編譯一下。這同時(shí)也有利于調(diào)試過(guò)程。
- php在任何地方都可以得到所需要的變量,在任何地方都可以執(zhí)行任何函數(shù)或方法
- php有大量的開(kāi)源項(xiàng)目,可以參考他們的代碼,比如wordpress, joomla, phpBB, drupal, discuz, mediawiki;而Java的開(kāi)源web項(xiàng)目,我一個(gè)都不知道
- php有許多超大規(guī)模網(wǎng)站的成功案例,比如:facebook,yahoo,wikipedia,baidu等;而Java,除了一個(gè)從網(wǎng),我就不知道別的了
- struts2需要外加數(shù)據(jù)模型庫(kù),比如hibernate,非常不喜歡hibernate生成代碼的方式,我認(rèn)為hql完全沒(méi)有必要;而zend Framework自己就提供了數(shù)據(jù)接口
- struts2的標(biāo)簽庫(kù)完全是雞肋
- struts2的布局系統(tǒng)需要外加別的模板庫(kù),比如sitemesh。而Zend Framework自己就能搞定
- php更加輕量,執(zhí)行速度更快。而且很魯棒。不會(huì)像JVM,因?yàn)橐粋€(gè)Servelet掛掉而當(dāng)機(jī)
- Java 的代碼過(guò)于復(fù)雜,大量無(wú)聊的getter和setter簡(jiǎn)直是一場(chǎng)噩夢(mèng)。做一件簡(jiǎn)單的事情也必須牽涉到幾個(gè)對(duì)象和函數(shù)
- Zend Framework很年輕,開(kāi)發(fā)遠(yuǎn)比Struts活躍。Zend Framework在一年內(nèi),從1.5升級(jí)到了1.9,期間包括近30個(gè)小版本,而Struts2在一年內(nèi)僅僅從2.1.6升級(jí)到了2.1.8
- php今年來(lái)發(fā)展勢(shì)頭非常好,遠(yuǎn)比Java更活躍;Java在Sun被收購(gòu)之后,各種改進(jìn)明顯受到影響
總結(jié)起來(lái),我們就能發(fā)現(xiàn)。php是為web而生的,各種特性都是為web而設(shè)計(jì),web需要小巧,輕量,敏捷開(kāi)發(fā),php都能滿(mǎn)足。而Zend Framework的誕生則讓php的生命力在企業(yè)級(jí)應(yīng)用上得以延續(xù)。而Java本來(lái)并不是為web而設(shè)計(jì)的,它過(guò)于笨重,在J2EE開(kāi)發(fā)上有明顯優(yōu)勢(shì),但是對(duì)于web項(xiàng)目,未免有些殺雞用牛刀。所以,最終我還是選擇了Zend Framework。