開源軟件的壞味道

摘要: # 前言 ![image.png](http://ata2-img.cn-hangzhou.img-pub.aliyun-inc.com/9f2ea42a91affcd3c6f4a82e62aea6d4.png) 開源軟件的世界,咱們一直帶着一顆敬畏之心來使用與學習,咱們總以爲他們高高在上、他們天衣無縫。但金無足赤,強如JDK、Spring也一樣有這樣或那樣的問題。 他們也並不是那麼高不可攀,java

前言

開源軟件的世界,咱們一直帶着一顆敬畏之心來使用與學習,咱們總以爲他們高高在上、他們天衣無縫。但金無足赤,強如JDK、Spring也一樣有這樣或那樣的問題。
他們也並不是那麼高不可攀,咱們也未必只配仰望,這裏咱們列舉開源軟件的那些「bad smell」,前車可鑑、後車之覆,開源軟件也一樣不完美。站在巨人肩膀上看到巨人的不完美,激勵着咱們往更成功的巨人之路邁進 ?spring

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在此處應該是更好的選擇。ui

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也是個不錯的選擇。spa

"Deeply nested code hurts readability and is error-prone"指針

--- Google Code Health Seriescode

後續

「挑刺」不是目的,有則改之無則加勉,他人之優與劣、功與過皆能在成功路上,助我等一臂之力。
PS.本文會長期跟進,你們有發現一些開源軟件的壞味道,也能夠直接在評論區留言,或發至個人郵箱 xiaolong.nxl@alibaba-inc.com,我會整理好後更新進去。orm

原文連接blog

相關文章
相關標籤/搜索