文档结构  
翻译进度:已翻译     翻译赏金:0 元 (?)    ¥ 我要打赏

我在某段时间,甚至是好几年,都在思考一个问题,既然我们已经有了优秀的开源项目包含了工具类和方法,为什么我们还坚持创建我们自己的工具类,例如StringUtils、DateUtils或者CollectionUtils呢?事实上,我最近就愚蠢地创建了一个CSVUtil类,而没有使用Apache Commons CSV或者OpenCSV

你最常见的方法是StringUtil.isNullOrEmpty。它可能跟下面这段代码相似:

第 1 段(可获 0.94 积分)

这不是糟糕的代码,它甚至让你能够 DRY(不要重复自己),让你不必重复检查null或空字符串。

但也有一些问题:

  • 重复发明轮子,因为已经有很多优秀的库提供了这个和其他更多的功能。
  • 创建了一个构件,你就需要做支持和编写单元测试。
  • 影响代码覆盖率——如果你不做单元测试,就会对代码覆盖率产生黑色标记。
  • 可能会导致一些bug。

我们看到这样的代码的一个原因是,它们是一个软件组织的贡献,而在pre-Java8的世界里, 我们检查了null ——我们没有可选的类。

第 2 段(可获 1.39 积分)

那我们该用什么呢?

  • Apache Commons:根据我的经验,这是最常见的工具集,它们可能可以替代很多你需要的工具。
  • Google Guava:这个比Apache Commons要新一点,虽然现在已经建立好了。该方式稍微有点特别,并允许你使用方法链。这可能更适合你的编码风格。

选择

库的选择没有一致性那么重要——所以不要在代码的一部分混合Apache Commons,同时又在代码的另一部分实现Guava。这将使未来的维护更容易。

第 3 段(可获 1.23 积分)

警告

和所有的最好的规则一样,有时你需要打破它们。在下面这种时候,我会创建一个工具类:

  • 具体实现:我在使用的包没有包含我需要的方法,我会尝试使用现有的工具作为基础,写一个自己的工具类。
  • 在Java8之前:我可能会创建一个工具类来起到一个外观的作用(封装成高层接口),例如说,作为日期的外观,或者因为我没有其他选择。
  • 拖延:创建工具类的最后一个原因是拖延和避免我的主要任务!我创建了工具类,那么至少在下一个站会(standup)时,我可以感觉自己做了事情。

所以我的2017新年决心是,停止创建这些类,使用已经被尝试使用和测试过的工具类,并在我看到这些类时,替换它们!

第 4 段(可获 1.64 积分)

文章评论