PHP+Java的開發(fā)經(jīng)驗(yàn):不要太面向?qū)ο?/h1>
說起面向?qū)ο螅F(xiàn)在很多語言多少都有一些。Java是傳統(tǒng)的面向?qū)ο笳Z言,PHP也有一些面向?qū)ο?,但不是很好。完全的面向?qū)ο笤诰唧w的項(xiàng)目中(本文是Web開發(fā)項(xiàng)目),有時(shí)候其實(shí)并不是***的選擇。本文作者最終選擇了PHP+Java的一個(gè)模式,并分享了一些自己的經(jīng)驗(yàn)。
我較早接觸了C++(高中),也較早接受了面向?qū)ο笏枷?。面向?qū)ο笏枷敫咏说乃伎挤绞?,其封裝、繼承等特性也常常能夠簡(jiǎn)化一些工作,最重要的是思路看起來清晰多了。我對(duì)面向?qū)ο蟮乃枷肷钚挪灰?,直到有一天,我在WEB項(xiàng)目中陷入困惑。
我以前的工作也都是WEB開發(fā)相關(guān)的,通常項(xiàng)目里都是接口、實(shí)現(xiàn),service層,DAO層這個(gè)樣子。久而久之,就習(xí)慣了這種模式。后來,我開始自己做網(wǎng)站(自己運(yùn)營(yíng)),也沿用這種模式,花了一陣子時(shí)間把東西弄出來,可以跑了,問題也隨之而來了。大家都知道,類似門戶網(wǎng)站這樣的東西,尤其是成長(zhǎng)期的網(wǎng)站,可能會(huì)經(jīng)常面對(duì)一些變更、擴(kuò)展。它不像企業(yè)項(xiàng)目或是以穩(wěn)定模式運(yùn)營(yíng)的網(wǎng)站,可以一套寫好的程序一直用下去??墒荍AVA的東西改動(dòng)起來有點(diǎn)麻煩。
***:項(xiàng)目里用了很多接口,業(yè)務(wù)變更有不少時(shí)候還要?jiǎng)咏涌凇?/STRONG>也許有人會(huì)說,這是因?yàn)樾枨鬀]做好。是的,可以這么認(rèn)為,但有個(gè)前提:需求根本沒法一步到位,否則網(wǎng)站也別跑了,等需求分析做好,花都謝了?;貞浺幌逻@個(gè)經(jīng)典的流程:要增加一個(gè)特性(頁面部分暫不討論),先增加或修改一個(gè)service接口;然后增加或修改其實(shí)現(xiàn);接著視需要可能還要再增加或修改一個(gè)DAO層接口,對(duì)應(yīng)的要增加或修改其實(shí)現(xiàn);***,我們真正要改的,往往只是一個(gè)SQL語句。
這一系列流程太過繁瑣了。門戶網(wǎng)站基本是展示信息的,它的業(yè)務(wù)邏輯,說到底基本上是SQL語句體現(xiàn)出來的。你想想看,網(wǎng)站上顯示什么東西,怎么排序,怎么聚合,這些不都對(duì)應(yīng)著相應(yīng)的SQL語句么?如果你非要把DAO層寫成基本的增刪改,然后在service層大作文章去實(shí)現(xiàn)本來對(duì)應(yīng)著一個(gè)SQL語句的業(yè)務(wù)羅輯,這有什么意思呢?純粹為了分層而分層?為了面向?qū)ο蠖嫦驅(qū)ο??更不用說那一堆接口,平白增加工作量。我當(dāng)然不會(huì)否認(rèn)接口在編程思想中的意義,只是傳統(tǒng)的JAVA WEB編程中的那一堆接口,是否真正是一個(gè)合理應(yīng)用呢?我看很多情況下不是。我后來用PHP重寫我的項(xiàng)目中的一大部分功能,只用了幾天的時(shí)間,沒有分層,沒有接口。這樣帶來的工作效率的提升,真是愜意!
第二:JAVA WEB項(xiàng)目的發(fā)布通常需要重啟服務(wù),造成WEB運(yùn)行中斷。不少人在討論熱部署,我不知道熱部暑最終能達(dá)到怎樣一個(gè)水平,但我想信無法達(dá)到像PHP那樣隨時(shí)修改文件隨時(shí)生效。為了不中斷服務(wù),我通常選擇做個(gè)集群,輪流發(fā)布。這樣雖然仍舊有可能產(chǎn)生一些問題,但比中斷應(yīng)用好多了??墒羌簳?huì)帶來發(fā)布上的麻煩,集群本身也未必是我真正需要的。
隨之而來的還有一些小問題,比如如果我項(xiàng)目中包含一些存儲(chǔ)大量文件的文件夾,在發(fā)布的時(shí)候又要特別處理,這樣很不爽。即使做軟鏈接,發(fā)布時(shí)也免不了要做額外工作。這些問題,當(dāng)然我想信會(huì)有更好的解決辦法,我個(gè)人目前仍在探索中。
面對(duì)上述這些問題,我最終不再堅(jiān)守面向?qū)ο?。我把?xiàng)目改成了前PHP后JAVA的形式。PHP做前端顯得靈活多了,整個(gè)改版,PHP的邏輯部分沒花多少時(shí)間,時(shí)間都用在了頁面設(shè)計(jì)上;JAVA的后端又能保證穩(wěn)定高效,易于安全設(shè)計(jì)。由此,我最終發(fā)出了“不要太面象對(duì)象”這一感嘆。需求決定一切,跟著別人的思想走,跟入邪教沒區(qū)別。
問題也還并沒有結(jié)束,對(duì)JAVA后端部分,我還在探索一個(gè)基于插件式的可以熱加載、缷截插件的CMS后端系統(tǒng)。呵,不能因?yàn)樯厦娴脑虬衙嫦髮?duì)象一棒子打死。
不過不管怎樣,看了作者的描述,倒是不妨試試PHP+Java的組合:看看放棄一些面向?qū)ο竽軌驇硇┦裁春锰幇伞?/P>
【編輯推薦】