[閑侃DRY] 自制框架 vs. 開(kāi)源框架
Posted on 2007-01-26 00:32 laogao 閱讀(984) 評(píng)論(0) 編輯 收藏 所屬分類(lèi): Programming in General 、Project Management 、The Other Side接著上一篇的思路聊。既然我們可以把開(kāi)發(fā)者社群看作一個(gè)整體,copy-paste別人的blog文章就是在違背DRY的精神,其實(shí)所謂"重造輪子"道理也是一樣,既然別人都已經(jīng)做了相同的事情,并且把它開(kāi)源了,并且你看了它的代碼以后,覺(jué)得做得不錯(cuò),為什么還要自己費(fèi)心去實(shí)現(xiàn)同樣的功能呢?自己來(lái)實(shí)現(xiàn)能給你帶來(lái)什么好處呢?
我可以列舉一些我認(rèn)為可能會(huì)讓我們選擇自己來(lái)做的理由:
- 我比其他人更了解我們自己的需求。
- 自己實(shí)現(xiàn)起來(lái)更容易,代碼量更小,也更好用。
- 我是做技術(shù)的,能夠DIY,就DIY,這樣更能體現(xiàn)我的價(jià)值。
這些理由有它的道理,但是我們有必要仔細(xì)掂量掂量:
- 我比其他人更了解我們自己的需求。這是軟件開(kāi)發(fā)中很常見(jiàn)的一個(gè)誤區(qū),客戶的需求難以把握,隨著時(shí)間的推移,我們自己的技術(shù)層面的需求實(shí)際上也在不斷變化,開(kāi)源的框架往往經(jīng)歷了更多的考慮和驗(yàn)證,并且有一群熱心的維護(hù)者幫你做bug-fix和升級(jí),甚至我們自己就可以成為這群熱心人中的一員。
- 自己實(shí)現(xiàn)起來(lái)更容易,代碼量更小,也更好用。一開(kāi)始確實(shí)是這樣的,開(kāi)源的框架為了滿足不同的需要,往往需要比我們自己寫(xiě)代碼要更加復(fù)雜和冗余,但是自制框架意味著我們自己定義的接口規(guī)范,這個(gè)接口規(guī)范能不能夠在整個(gè)項(xiàng)目周期保持穩(wěn)定暫且不談,就算接口實(shí)現(xiàn)的再簡(jiǎn)單,項(xiàng)目中其他人也需要時(shí)間去理解和消化,然后記住一個(gè)定義好的調(diào)用方式,今后新加入的工程師也需要學(xué)習(xí)這個(gè)接口規(guī)范。開(kāi)源框架則做得更好,一方面在這個(gè)項(xiàng)目中積累和學(xué)習(xí)到的知識(shí),可以直接用在其他采用同一框架的項(xiàng)目中,另一方面新加入的人如果有過(guò)該開(kāi)源框架的開(kāi)發(fā)經(jīng)驗(yàn),上手時(shí)間可以縮短。
- 我是做技術(shù)的,能夠DIY,就DIY,這樣更能體現(xiàn)我的價(jià)值。我必須承認(rèn),我本人就親身經(jīng)歷過(guò)這樣的情況。在即將結(jié)束的這個(gè)項(xiàng)目中,我甚至自己DIY了一個(gè)簡(jiǎn)易的.NET報(bào)表引擎,為的是甩開(kāi)Crystal Reports。一開(kāi)始能夠DIY報(bào)表引擎的想法讓我興奮得睡不著覺(jué),最終前后花了3天很滿意的完成了設(shè)計(jì)和開(kāi)發(fā),并交付報(bào)表開(kāi)發(fā)人員重畫(huà)報(bào)表。可是真正用了一段時(shí)間之后,基本的需求滿足了,基本的可擴(kuò)展性也具備,但是缺少可視化設(shè)計(jì)器、更靈活的公式、更豐富的報(bào)表元素,基本上就定型了,沒(méi)有人有時(shí)間和精力再去維護(hù)它。
在很多開(kāi)發(fā)團(tuán)隊(duì),大家經(jīng)常碰在一起討論具體的技術(shù)和設(shè)計(jì),這很有必要,有時(shí)也不可避免。但是也許Joel Spolsky說(shuō)的對(duì),軟件設(shè)計(jì)很難,但是比設(shè)計(jì)軟件更難的,是同整個(gè)team一起設(shè)計(jì)軟件。做技術(shù)的,對(duì)于自己了解、掌握、做過(guò)、嘗試過(guò)的東西,對(duì)于自己熟悉和信任的東西,多多少少有些偏袒,而對(duì)于新的、自己不了解、不熟悉的東西,則難免心存疑慮。這就難怪很多設(shè)計(jì)討論會(huì)最終很難達(dá)成一致。這個(gè)時(shí)候,要么由技術(shù)上的最高權(quán)威直接拍板,定下來(lái)是什么就是什么,要么就分歧雙方或多方各自陳述,然后由項(xiàng)目外部的實(shí)體進(jìn)行獨(dú)立仲裁。
我看好開(kāi)源框架,尤其是那些經(jīng)過(guò)考驗(yàn)廣泛被采用的框架,因?yàn)橄啾茸灾瓶蚣埽鼈冇兄蟮膬?yōu)勢(shì)。