炒冷飯:關(guān)于選擇框架(或稱通用成熟技術(shù))
(加Java少許)
一直以來都習(xí)慣性的使用成熟的框架來進(jìn)行開發(fā)工作,卻沒注意過為什么要這么干,仿佛只是“從惡如崩”。最近在維護(hù)一個(gè)遺留系統(tǒng)時(shí),完全是jsp+servlet來做的。思考使人進(jìn)步,小弟不才,在郁悶之余就是抓著頭發(fā)胡思亂想。結(jié)果就是,俺對成熟框架技術(shù)的傾向性更加明顯了。
為什么要用框架來工作
單單用最簡單的技術(shù)不好嗎?比如jsp,或者進(jìn)一步再加一點(diǎn)servlet。偶認(rèn)為,做個(gè)測試,驗(yàn)證個(gè)事情,這些簡單的東東,用的技術(shù)越簡單越好,簡單上手快,從頭到尾2分鐘就驗(yàn)證完了;要是用框架,恐怕先把架子搭起來就10分鐘過了。
簡單的驗(yàn)證可以天馬行空隨心所欲,但是做應(yīng)用做產(chǎn)品就不一樣了。對于一個(gè)企業(yè)級的應(yīng)用系統(tǒng)來說,可維護(hù)性、可測試性和團(tuán)隊(duì)開發(fā)的便利性等等等等是更重要的。顯然對于這些特性,公開的框架技術(shù)比私有開發(fā)的技術(shù)有更多的優(yōu)勢,(或許)更重要的是現(xiàn)在流行的這些框架技術(shù)同時(shí)還提供了很多企業(yè)級特性,比如日志、事務(wù),這些特性經(jīng)過了很多人的驗(yàn)證,基本來說肯定比自己簡單實(shí)現(xiàn)的要更可靠。
開源框架技術(shù)相對私有簡單技術(shù)來說,有一個(gè)突出的優(yōu)勢,使用人群。使用人群大明顯的意味著兩點(diǎn)好處:一、更多的問題別人都遇到過,可能都有辦法解決了已經(jīng);二、更多的文檔,哪怕很少的人把他們的經(jīng)驗(yàn)寫下來,因?yàn)槿巳夯鶖?shù)大,文檔總數(shù)也會是驚人的。
不光是開源的框架,很多大企業(yè)也有自己內(nèi)部的應(yīng)用框架,江湖傳聞東軟就有:),這種公司內(nèi)部的基礎(chǔ)架構(gòu)也是很有優(yōu)勢的,是公司持續(xù)的投資,技術(shù)的積淀。當(dāng)然積淀下來要變成糞堆您別找俺,俺離那好遠(yuǎn)好遠(yuǎn):)。俺親歷過Jade,IBM的一個(gè)類似Struts但歷史應(yīng)該更悠久的MVC框架,做的很不錯(cuò),活的很好,IBM很多應(yīng)用都是這個(gè)東西在下面頂著。
如何選擇一個(gè)合適的框架
在偶看來,如何選擇 一個(gè)合適的框架,要從幾個(gè)方面綜合考慮。
首先,目標(biāo)框架是不是被大眾廣泛接受的,拿大家見的最多的MVC框架來說,SpringMVC、Struts、webwork2、Struts2、Tapstry、JSF都符合這一條件,他們都各有廣大的使用群。
其次,開發(fā)人員是不是對目標(biāo)框架比較了解,移植到新技術(shù)框架上開發(fā)的成本有多大,不能為了嘗試新的框架技術(shù)而拿新項(xiàng)目來做試驗(yàn),除非客戶的銀子和周期可以任意揮霍,或者能完全引導(dǎo)客戶。
然后還有就是要考慮到項(xiàng)目的可維護(hù)性,不能一個(gè)項(xiàng)目采用一個(gè)框架,后期維護(hù)起來還要額外的熟悉技術(shù)的成本。當(dāng)然單純從開發(fā)人員的角度來說,這樣或許也不錯(cuò),可以熟悉各種技術(shù),做萬金油比較容易。對于一個(gè)大項(xiàng)目分幾個(gè)組來分別共同完成時(shí),很容易在這點(diǎn)上出問題。林子大了什么鳥都有,用的技術(shù)太多了,換個(gè)坑蘿卜栽不下去,工期耽誤肯定難免了。(最近俺是深受其害呀:()
還有一種情況,其實(shí)沒的選擇,比如你進(jìn)入一個(gè)公司,他們恰好有自己的一套東東,這時(shí)候就只好用了。非要另起爐灶,估計(jì)你就得被掃地出門了。不過這種情況一般都會有人培訓(xùn)下:),不會上來就讓你胡來的。
加強(qiáng)選定的框架
依托一個(gè)框架工作久了,自然而然的就會遇到一些情況。比如,需要一個(gè)新的功能,而選擇的框架本身沒有提供;已有的功能用起來總是覺得別扭,和自己的思路不太對應(yīng)等等。舉個(gè)比較遙遠(yuǎn)的例子來說,2003/2004的那個(gè)年末年初struts大概在0.9版,那個(gè)時(shí)候是沒有DispatchAction可用的,于是乎江湖中出現(xiàn)了若干實(shí)現(xiàn)這一功能的方式。(大體都是走反射的路子,直到1.1版本出現(xiàn),具體"歷史-版本"可能對應(yīng)不夠準(zhǔn)確,但這個(gè)事件確實(shí)經(jīng)歷了:))。
但對公司內(nèi)部應(yīng)用框架來說可能比較麻煩了,不一定有源碼可改啊(更甚者,改了被人罵啊)。只能一邊反映問題、一邊找彎路了。或許還要偷偷祈求寫基礎(chǔ)框架的人不是那么的SiBan,能很快出活。
選用框架可能面臨的風(fēng)險(xiǎn)
對于一個(gè)穩(wěn)定的團(tuán)隊(duì),貿(mào)然選用不熟悉的技術(shù)肯定是存在風(fēng)險(xiǎn)的。其實(shí)這種情況在軟件開發(fā)來說很常見,畢竟新技術(shù)層出不窮,這時(shí)候除了公司給予必要培訓(xùn)(很少有公司培訓(xùn)你)以外,就只能靠“積極加自我修養(yǎng)”了。
開源技術(shù)有個(gè)特點(diǎn)--版本更新快,尤其在剛推出的時(shí)候。這時(shí)就有個(gè)問題了,APIs的穩(wěn)定性,不同版本之間的兼容性。舉例來說,Hibernate大家都用過,2和3之間別的不說,包名都變了。另外開源框架的技術(shù)支持也是個(gè)問題,畢竟沒有商業(yè)支持嘛,出了問題更多的只能靠埋頭鉆研、前輩提攜和江湖救急了。
對于有內(nèi)部基礎(chǔ)框架的公司來說,其實(shí)這個(gè)不是問題,唯一的問題就是,這個(gè)基礎(chǔ)框架夠不夠結(jié)實(shí),可千萬別豆腐渣了,讓干活的兄弟們受罪啊。
使用框架技術(shù)是一種流行,但是不應(yīng)該像流行感冒一樣,莫明其妙就讓它流行,否則這么多的框架技術(shù)就會弄你個(gè)百毒俱侵,必須加以甄別,。希望本文能夠?qū)γ悦5娜擞兴鶐椭辽龠@碗冷飯能讓您打個(gè)牙祭。
btw:冷飯吃壞肚子原則上偶不承擔(dān)任何法律責(zé)任,但愿意提供無償紅十字援助。
--- 很久之前的一篇文章了,忘了什么原因沒貼出來。今晚整理垃圾箱的時(shí)候翻出來的。