开源软件的坏味道

简介: # 前言 ![image.png](http://ata2-img.cn-hangzhou.img-pub.aliyun-inc.com/9f2ea42a91affcd3c6f4a82e62aea6d4.png) 开源软件的世界,我们一直带着一颗敬畏之心来使用与学习,我们总觉得他们高高在上、他们完美无缺。但金无足赤,强如JDK、Spring也同样有这样或那样的问题。 他们也并非那么遥不可及,

前言

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

image.png

同样在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

image.png

后续

“挑刺”不是目的,有则改之无则加勉,他人之优与劣、功与过皆能在成功路上,助我等一臂之力。
PS.本文会长期跟进,大家有发现一些开源软件的坏味道,也可以直接在评论区留言,或发至我的邮箱 xiaolong.nxl@alibaba-inc.com,我会整理好后更新进去。

目录
相关文章
|
5月前
|
SQL 安全 数据安全/隐私保护
【惊心动魄!】Rails开发者的噩梦:那些差点毁了我职业生涯的安全漏洞……
【8月更文挑战第31天】本文探讨了加强Ruby on Rails应用安全性的最佳实践,包括防止SQL注入、XSS与CSRF攻击及安全存储密码等。通过对比不安全与安全的代码示例,如使用`User.find`替代`find_by_sql`避免SQL注入,利用`h`方法防御XSS攻击,以及借助`bcrypt`库加密密码,本文提供了实用的指导。同时强调了定期更新Rails框架和使用`brakeman`等工具的重要性,以持续保障应用安全。
50 0
|
Go
腥风血雨中,这招救了我的代码!
腥风血雨中,这招救了我的代码!
66 0
|
数据库
代码坏味道
代码坏味道
133 0
四道好题分享(看似简单,但是棘手)
四道好题分享(看似简单,但是棘手)
121 0
|
设计模式 移动开发 安全
与其硬啃“屎山”代码,不如用这六步有条不紊实现代码重构 李慧文
对大规模系统进行重构,如果一个人对着又臭又长的代码硬刚,即使花了大量的时间进行手工验证,最后仍然会有很多问题,特别是一些深路径及特殊场景下的问题。其实,大规模的系统级别重构时是有方法的。我们采访了 Thoughtworks 数字化转型与运营 资深咨询师黄俊彬(QCon+案例研习社讲师),请他来分享 MV*模式重构演进的方法和经验。
582 0
与其硬啃“屎山”代码,不如用这六步有条不紊实现代码重构 李慧文
|
设计模式 Oracle IDE
讲码德!避免这些代码坏味道,努力做一名优秀的程序员
讲码德!避免这些代码坏味道,努力做一名优秀的程序员
|
安全 数据建模 UED
思考:互联网创业三思后行还是想到就做?
思考:互联网创业三思后行还是想到就做?
178 0
思考:互联网创业三思后行还是想到就做?
|
网络虚拟化
【俺修复的印象最深的bug】一名在校网工处理的一个无语的网络Bug
【以及经过脱敏处理,无重要信息泄露】本人在校大学生,网络水平还行,是学校信息中心常驻外援工程师,hhhhhhhhhhhhh。 某次在食堂吃晚饭的时候一个电话把我call过去,说新配置一新机房网络,网联不通,弄了一下午了看不出问题。
1670 0
【俺修复的印象最深的bug】一名在校网工处理的一个无语的网络Bug
瞧!这5000个爱管闲事的工程师干的好事.....
从 2018 年 4 月来到大爱清尘基金开始,师先存就没有正经过过几个周末。
10176 0
|
Java 程序员 Spring
Java开发程序员遇危机,才31竟遭公司嫌弃,网友:还拿着6k等死?
程序员会有中年危机,一个很大的因素来自:我们曾经引以为傲、赖以生存的开发技术会被淘汰。而学习新开发技术成本太高。看着快速崛起的年轻人,不免使人心生:廉颇老矣的感慨。
1205 0

相关实验场景

更多