開源軟體的壞味道
前言
開源軟體的世界,我們一直帶著一顆敬畏之心來使用與學習,我們總覺得他們高高在上、他們完美無缺。但金無足赤,強如JDK、Spring也同樣有這樣或那樣的問題。
他們也並非那麼遙不可及,我們也未必只配仰望,這裡我們列舉開源軟體的那些「bad smell」,前車之鑒、後車之覆,開源軟體也同樣不完美。站在巨人肩膀上看到巨人的不完美,激勵著我們往更成功的巨人之路邁進 ?JDK篇
Handler#setFormatter
代碼片段出自java.util.logging.Handler#setFormatter,作者為了不讓空指針異常下傳,提前做一次檢查,這本無可厚非,但採用這種方式來檢查,或許並不是個優雅的方案。
"Comments Do Not Make Up for Bad Code"
--- Robert C.Martin 《Clean Code》
同樣在java.util包下,java.util.Objects#requireNonNull在此處應該是更好的選擇。
public static <T> T requireNonNull(T obj, Supplier<String> messageSupplier) {
if (obj == null)
throw new NullPointerException(messageSupplier.get());
return obj;
}
Spring篇
BeanUtils#copyProperties
代碼出自org.springframework.beans.BeanUtils#copyProperties,代碼中引入了過多的if,嵌套的層級達到6層之多。但細看不難發現,其實都不是不同的邏輯分支,而是一些filter過濾,一方面用lambda的filter可以優化,提前return也是個不錯的選擇。
"Deeply nested code hurts readability and is error-prone"
--- Google Code Health Series
後續
「挑刺」不是目的,有則改之無則加勉,他人之優與劣、功與過皆能在成功路上,助我等一臂之力。
本文作者:聶曉龍
原文鏈接
更多技術乾貨敬請關注云棲社區知乎機構號:阿里云云棲社區 - 知乎
本文為雲棲社區原創內容,未經允許不得轉載。
推薦閱讀: