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


咨詢
建站咨詢
