淺談?dòng)妹艚莘椒ㄟM(jìn)行軟件重用
Brandon Olivares發(fā)起了討論。他說(shuō),他剛剛在某些代碼上用了30小時(shí)的時(shí)間,然后覺(jué)得這些代碼可能會(huì)被重用,于是就覺(jué)得很矛盾,不知道是不是該把這些代碼抽象出來(lái),這樣其他項(xiàng)目就有可能也用得到。
按照我個(gè)人理解來(lái)看,XP不鼓勵(lì)假想某些東西可能會(huì)被用到,除非確實(shí)到了要用那個(gè)東西的時(shí)間點(diǎn)上。還是我的個(gè)人理解,剛才所說(shuō)的東西也包括提取代碼以供日后重用,XP提倡的是到了出現(xiàn)重復(fù)的時(shí)候再去做重構(gòu)。
軟件重用長(zhǎng)期以來(lái)一直被極力宣揚(yáng)為可以大量節(jié)省時(shí)間,也許另一個(gè)項(xiàng)目中的人可以重用你的代碼,而不用重新開(kāi)發(fā)。Brandon想知道其他人都是怎么決定在什么時(shí)候抽象代碼加以泛化的。
Ron Jeffries***個(gè)回復(fù),他講了為什么跨團(tuán)隊(duì)重用的做法比初看起來(lái)要困難且昂貴得多:
我必須得給它打包,要是就我自己用的話這活就不用干了;我得給它寫文檔;我得讓它更加抗造,把周邊的一些問(wèn)題去掉;我得給它提供支持,回答很多問(wèn)題;我得訓(xùn)練別人用它。
如果我做了這些事情,代價(jià)就很高;如果我不做,別人用我的東西就很困難,給他們帶不來(lái)多少幫助。
因?yàn)檫@些原因,Ron采取的是這種做法:
我只做適當(dāng)?shù)某橄螅瑝蜃约河镁秃?。如果我以后在一個(gè)稍微不同的環(huán)境下還需要用的話,我就會(huì)改進(jìn)抽象。不過(guò)除非我的項(xiàng)目目標(biāo)是給其他項(xiàng)目構(gòu)建成品,我就不會(huì)浪費(fèi)時(shí)間和金錢去給其他項(xiàng)目做東西。
還有一位認(rèn)為,如果所有的項(xiàng)目都共享一套通用構(gòu)建系統(tǒng)和測(cè)試套件,那重用就會(huì)容易一些。在這樣的環(huán)境中,如果某個(gè)團(tuán)隊(duì)打算重用某些可以泛化的代碼,這個(gè)構(gòu)建系統(tǒng)就可以保證他們不會(huì)給其他需要這些代碼的團(tuán)隊(duì)造成障礙。
George Dinwiddie、Ralph E. Johnson等人推薦到第二次(乃至更晚)用到同樣代碼的時(shí)候再做泛化。Adam Sroka把這個(gè)叫做“演化重用”,他認(rèn)為這種方法比“為重用而設(shè)計(jì)”效率更高。一名叫做Tim的人發(fā)帖說(shuō),他這樣給業(yè)務(wù)人員解釋:“***次,你是給編碼買單;第二次,你是給重用買單;第三次,它就是免費(fèi)的了。”
George指出,更困難的地方在于怎么讓其他團(tuán)隊(duì)意識(shí)到有些代碼可以重用。幫助大家發(fā)現(xiàn)良機(jī)的溝通成本可能會(huì)很高。Jeff Langr說(shuō),讓開(kāi)發(fā)人員跨團(tuán)隊(duì)結(jié)對(duì),可以解決這個(gè)問(wèn)題。
Scott Ambler也加入了交流,他提到,開(kāi)源也是重用的一種形式,它已經(jīng)取得了巨大成功。他同時(shí)也提到,代碼庫(kù)、開(kāi)發(fā)工具包乃至mash-up這些都是軟件重用的成功案例。
【編輯推薦】