如何提高代碼復(fù)用性?
在說明如何提高代碼復(fù)用性前,有必要了解一下代碼復(fù)用性的層次,大致整理了如下幾個(gè)層次,下面分別說明:
1.第一層
最能想到,最常用的代碼復(fù)用:方法和類復(fù)用,比如說我們寫了一個(gè)方法,這個(gè)方法在本jar包中其他地方也用,那可以抽出來放在一個(gè)類中,這樣其他類也可以使用;常見的就是各種xxxUtil類,如常見的StringUtil:
public class StringUtil {
public static boolean isEmpty(String value) {
return value == null || value.trim().length() == 0 || "null".endsWith(value);
}
}
2.第二層
隨著項(xiàng)目越來越大,我們發(fā)現(xiàn)不光本jar包里面需要此復(fù)用類了,其他很多jar都需要此類,那怎么辦,這時(shí)候就出現(xiàn)了把相關(guān)復(fù)用類放到一個(gè)jar包中,比如叫xx-
util.jar
,這樣其他jar都可以直接引用這個(gè)通用jar;3.第三層
項(xiàng)目慢慢的發(fā)展,出現(xiàn)了另外的問題,復(fù)用jar包升級的問題,比如復(fù)用jar里面有個(gè)bug需要升級,那么其他所有引用此jar的地方都要升級,改動(dòng)量很大;這該怎么解決,這時(shí)候出現(xiàn)了服務(wù)化,也就是說公共的jar功能不在被其他應(yīng)用引用,而是對外提供一個(gè)統(tǒng)一個(gè)服務(wù)接口,這樣不管我這個(gè)服務(wù)內(nèi)部怎么變只要接口不變都沒有關(guān)系;
4.第四層
隨著服務(wù)越來越多,服務(wù)間調(diào)用越來越頻繁,出現(xiàn)了rpc中間件;數(shù)據(jù)庫的訪問也出現(xiàn)了數(shù)據(jù)庫中間件;消息的發(fā)送存儲(chǔ)接收出現(xiàn)了消息中間件;緩存,調(diào)度,配置中心,等等大量的中間件出現(xiàn)使我們構(gòu)建一個(gè)服務(wù)更加方便;這其實(shí)也是一種更加抽象的復(fù)用;
5.第五層
下一代微服務(wù)網(wǎng)格,服務(wù)間通信的基礎(chǔ)設(shè)施層,對開發(fā)人員來說屏蔽了更多的細(xì)節(jié),專注更多的業(yè)務(wù);
從上面5個(gè)層次來看,其實(shí)也是軟件行業(yè)開發(fā)經(jīng)歷的過程;其實(shí)我們可以從軟件抽象復(fù)用的角度來看,其他每一層次的進(jìn)化,都是為了更好的復(fù)用,抽象出更多的本質(zhì)東西,使開發(fā)人員更加的關(guān)注各自不一樣的業(yè)務(wù)。
那么問題來了如何提高代碼的復(fù)用性,我覺得離不開兩個(gè)詞:抽象;其實(shí)現(xiàn)在大量使用的各種中間件何嘗不是一種抽象,抽出本質(zhì)的東西,放在一個(gè)地方單獨(dú)處理;舉個(gè)簡單的例子,比如我要到某地去,我可以騎車去,可以做公交去,可以走去,可以開車去,但是抽出本質(zhì)其實(shí)就是我要去某地,關(guān)于如何去都是具體的實(shí)現(xiàn)方式。