新聞中心
本文的作者Elliotte是一位著名的IT方面的作家,寫20多本關(guān)于編程方面的書籍,有很多書籍在國內(nèi)都有出版,其中包括《重構(gòu)HTML:改善Web應(yīng)用的設(shè)計(jì)》, 《Java I/O》, 《Java網(wǎng)絡(luò)編程》,《Xml Bible》和《XML in a Nutshell》等,目前他正在研究XML處理器XOM、jaxen XPath引擎和Amateur媒體播放器。

創(chuàng)新互聯(lián)基于分布式IDC數(shù)據(jù)中心構(gòu)建的平臺(tái)為眾多戶提供西部信息中心 四川大帶寬租用 成都機(jī)柜租用 成都服務(wù)器租用。
上周,一位同事的一個(gè)觀點(diǎn)讓我深受啟發(fā),這個(gè)觀點(diǎn)是如此的顯而易見,以至于當(dāng)他說出來時(shí)我驚奇于為什么以前沒有意識(shí)到這點(diǎn):
| 如果你為復(fù)用而設(shè)計(jì),那你就做錯(cuò)了。 |
你現(xiàn)在要寫的代碼的唯一目的就是服務(wù)于你目前手頭上的需要解決的任務(wù)。不要為復(fù)用而設(shè)計(jì)。不要去考慮復(fù)用。不要為讓代碼復(fù)用而浪費(fèi)一秒鐘時(shí)間。
事實(shí)上,任何你需要的可以復(fù)用的代碼都已經(jīng)存在了。想要去連接一個(gè)HTTP Server,并且要全面支持安全認(rèn)證和cookies嗎?這個(gè)東西聽起來很多項(xiàng)目都可以用到,于是,你想把這個(gè)東西封裝一下做成一個(gè)易用的HTTP類或共享包,很好的想法不是?錯(cuò)。你應(yīng)該使用 Apache HttpClient。
需要解決你的拋物線方法的初始值問題嗎?不要去翻看你的《numerical analysis textbook》,你需要做的是下載Flanagan的Java科學(xué)計(jì)算庫,或購買一個(gè)NAG許可證。想要給你的同事們做一個(gè)日歷選擇組件嗎?直接告訴他們?nèi)ビ肑Calendar。盡管它在外觀和使用方法上和你想象的不是完全一致,但完全夠用。如果你打算做出自己的組件,或找一個(gè)現(xiàn)有的修改一下,你會(huì)發(fā)現(xiàn),你開發(fā)出的這種不一樣的表現(xiàn)效果并不適合另外一些人的應(yīng)用,所以,不要浪費(fèi)時(shí)間去開發(fā)自己的可復(fù)用的代碼。
這些例子都是針對(duì)Java來說的,但對(duì)于另外一些主流的語言,比如Perl,Python,Ruby,C++,C#,Scala等,都是適用的。事實(shí)上,如果一種語言不能提供解決你的問題的可復(fù)用的代碼,那你就是選錯(cuò)了解決你的問題的語言。
有例外的情況嗎?我只能想出兩種(目前為止我感覺沒有第三種情況了)。
***種例外是你在開發(fā)一種新的東西,你需要的類庫不存在,你是***個(gè)進(jìn)入這個(gè)領(lǐng)域的人,你需要寫出可復(fù)用的代碼。例如,當(dāng)我率先開發(fā)出XIncluder類庫時(shí),XInclude的規(guī)范還處于制訂中,你在Java里找不到第二個(gè)可用的類庫。我寫的這個(gè)類庫成了規(guī)范的可實(shí)現(xiàn)的一種證明,推動(dòng)了規(guī)范向更完備的狀態(tài)發(fā)展。十年前開發(fā)我自己的XInclude類庫是明智的,而今天絕對(duì)不會(huì)再重做這樣的事。
第二種例外情況是針對(duì)專家的,我甚至還不確定這是否是例外。如果你是某一個(gè)領(lǐng)域的真正專家,有可復(fù)用的代碼能解決你的領(lǐng)域的問題,而你經(jīng)過認(rèn)真的研 究現(xiàn)有的解決方案,你認(rèn)為它們是不完善的,你在尋找一種更好的解決方法,這時(shí),而且只有這時(shí),你可以考慮寫出你自己可復(fù)用的代碼。這就是我為什么要開發(fā)XOM的 原因。只是在我寫了數(shù)百頁的書稿,詳盡的收集了目前Java里處理XML的各種API,知道了它們的優(yōu)點(diǎn)和缺點(diǎn)后,我才覺得應(yīng)該坐下來設(shè)計(jì)一個(gè)API來改 進(jìn)它們。盡管我認(rèn)為我設(shè)計(jì)的API是***的API,但我仍然不確定把時(shí)間花在它上面是否值得。XOM,按我的觀點(diǎn),比之前的任何API都好,但它并不是好 到能夠在大量的其它項(xiàng)目中替代其它的類庫。對(duì)這個(gè)新API的需求不是真正的很大。
還有另外的例外嗎?還有另外的一種情況里你需要寫出可復(fù)用的代碼嗎?我想不出。有如此多的程序員花了如此多的時(shí)間來探索我們生活中存在的問題,并把 他們的成果放在 Sourceforge 和 Github 這樣的網(wǎng)站上免費(fèi)分享。當(dāng)然,新的問題會(huì)不斷的出現(xiàn),但對(duì)一些老的問題,如果去再重新研究它們一遍,你并不能從中獲得多大的收益。下一次,如果你發(fā)現(xiàn)自己 在為復(fù)用而設(shè)計(jì),請(qǐng)住手,問問自己是否可以復(fù)用別人的代碼。
[英文原文:Don’t Design for Reuse ]
分享標(biāo)題:不要為復(fù)用而設(shè)計(jì)
本文地址:http://www.5511xx.com/article/cojpshp.html


咨詢
建站咨詢
