开源软件的坏味道

作者: 阿里云云栖号 | 来源:发表于2018-11-14 17:47 被阅读84次

    前言

    开源软件的世界,我们一直带着一颗敬畏之心来使用与学习,我们总觉得他们高高在上、他们完美无缺。但金无足赤,强如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

    后续

    “挑刺”不是目的,有则改之无则加勉,他人之优与劣、功与过皆能在成功路上,助我等一臂之力。



    本文作者:聂晓龙

    阅读原文

    本文为云栖社区原创内容,未经允许不得转载。

    相关文章

      网友评论

      • 锤子货:请在指出别人错误时,提出自己的解决方案

      本文标题:开源软件的坏味道

      本文链接:https://www.haomeiwen.com/subject/nandfqtx.html