开源软件的坏味道

简介: # 前言 ![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,我会整理好后更新进去。

目录
相关文章
|
机器学习/深度学习 并行计算 API
【GPU】CUDA是什么?以及学习路线图!
【GPU】CUDA是什么?以及学习路线图!
4434 0
|
IDE Linux 开发工具
内存泄漏检测工具Valgrind:C++代码问题检测的利器(一)
内存泄漏检测工具Valgrind:C++代码问题检测的利器
2861 0
|
存储 C++ UED
【实战指南】4步实现C++插件化编程,轻松实现功能定制与扩展
本文介绍了如何通过四步实现C++插件化编程,实现功能定制与扩展。主要内容包括引言、概述、需求分析、设计方案、详细设计、验证和总结。通过动态加载功能模块,实现软件的高度灵活性和可扩展性,支持快速定制和市场变化响应。具体步骤涉及配置文件构建、模块编译、动态库入口实现和主程序加载。验证部分展示了模块加载成功的日志和配置信息。总结中强调了插件化编程的优势及其在多个方面的应用。
1140 182
|
JavaScript 前端开发 Go
8 大博客引擎 jekyll/hugo/Hexo/Pelican/Gatsby/VuePress/Nuxt.js/Middleman 对比
探索各类博客引擎:Jekyll、Hugo、Hexo、Pelican、Gatsby、VuePress、Nuxt.js和Middleman的对比,包括语言、模板引擎、速度、社区活跃度等。了解每种引擎的优缺点,助你选择合适的博客构建工具。查看详细文章以获取更多实战和安装指南。
|
机器学习/深度学习 算法 定位技术
环境系统工程是系统工程的一个分支,它特别关注于环境问题的系统分析和解决方案。
环境系统工程是系统工程的一个分支,它特别关注于环境问题的系统分析和解决方案。
一键自动化博客发布工具,用过的人都说好(掘金篇)
使用一键自动化博客发布工具blog-auto-publishing-tools把博客发布到掘金上。
一键自动化博客发布工具,用过的人都说好(掘金篇)
|
缓存 API Android开发
快速开发android,离不开这10个优秀的开源项目
作为一名菜鸡Android,时常瞻仰大佬们的开源项目是非常必要的。这里我为大家收集整理了10个优秀的开源项目,方便我们日常开发中学习!
3101 0
|
物联网 大数据 BI
助力工业物联网,工业大数据之费用事实指标分析及实现【二十四】
助力工业物联网,工业大数据之费用事实指标分析及实现【二十四】
130 0