回覆列表
  • 1 # ksfzhaohui

    在說明如何提高程式碼複用性前,有必要了解一下程式碼複用性的層次,大致整理瞭如下幾個層次,下面分別說明:

    1.第一層

    最能想到,最常用的程式碼複用:方法和類複用,比如說我們寫了一個方法,這個方法在本jar包中其他地方也用,那可以抽出來放在一個類中,這樣其他類也可以使用;常見的就是各種xxxUtil類,如常見的StringUtil:

    public class StringUtil {

    public static boolean isEmpty(String value) {

    return value == null || value.trim().length() == 0 || "null".endsWith(value);

    }

    }

    2.第二層

    隨著專案越來越大,我們發現不光本jar包裡面需要此複用類了,其他很多jar都需要此類,那怎麼辦,這時候就出現了把相關複用類放到一個jar包中,比如叫xx-

    util.jar

    ,這樣其他jar都可以直接引用這個通用jar;

    3.第三層

    專案慢慢的發展,出現了另外的問題,複用jar包升級的問題,比如複用jar裡面有個bug需要升級,那麼其他所有引用此jar的地方都要升級,改動量很大;這該怎麼解決,這時候出現了服務化,也就是說公共的jar功能不在被其他應用引用,而是對外提供一個統一個服務介面,這樣不管我這個服務內部怎麼變只要介面不變都沒有關係;

    4.第四層

    隨著服務越來越多,服務間呼叫越來越頻繁,出現了rpc中介軟體;資料庫的訪問也出現了資料庫中介軟體;訊息的傳送儲存接收出現了訊息中介軟體;快取,排程,配置中心,等等大量的中介軟體出現使我們構建一個服務更加方便;這其實也是一種更加抽象的複用;

    5.第五層

    下一代微服務網格,服務間通訊的基礎設施層,對開發人員來說遮蔽了更多的細節,專注更多的業務;

    從上面5個層次來看,其實也是軟體行業開發經歷的過程;其實我們可以從軟體抽象複用的角度來看,其他每一層次的進化,都是為了更好的複用,抽象出更多的本質東西,使開發人員更加的關注各自不一樣的業務。

    那麼問題來了如何提高程式碼的複用性,我覺得離不開兩個詞:抽象;其實現在大量使用的各種中介軟體何嘗不是一種抽象,抽出本質的東西,放在一個地方單獨處理;舉個簡單的例子,比如我要到某地去,我可以騎車去,可以做公交去,可以走去,可以開車去,但是抽出本質其實就是我要去某地,關於如何去都是具體的實現方式。

  • 中秋節和大豐收的關聯?
  • 如果有一天,你擁有一次復活金庸先生書中角色的能力,讓你選擇的話,你會選擇復活誰?