Don't Write Reusable Code

不少开发者在写代码时,都追求代码的复用,很多设计原则也是这么告诉我们的。我之前也对这些原则如数家珍,觉得一定要遵循,直到我读到 Don’t write reusable code,作者在文章中说,可重用代码不是目的,而是为了解决特定问题编写的简洁代码的副产品。

为了证明这一观点,作者提供了如下论据:

  • 没有明确的实践或是指导原则来告诉你应该如何编写可复用的代码,DRY原则不算,你仔细想想应该能明白,毕竟重复和复用是两个不同的概念;
  • 编写为可复用代码通常会假设未来会遇到这样的问题,并提出很多假设,而为了实现这些假设,又增加了很多配置,这些方法都是反模式;
  • 假定未来会使用就是一个伪命题,如果你看公司1年之前的代码,你会发现不少dead code和再也不会使用的配置;
  • 一段好代码通常只会用来解决一个小的且明确定义的问题,这个问题越小,定义越明确越好
  • 代码复用的唯一条件就是问题重复发生,当问题发生,这些代码可以解决这个问题,如果这个问题不发生,也没必要花精力在可复用上

总结起来一句话,开发者只需要把精力放在如何编写简洁明了的代码去解决那些特定的问题即可,如果这些问题在未来真的发生了,可复用代码自然而然就出现了。如果你还不死心,这里有一个关于Spring Framework的统计,下面是前10个复用率最高的类:

1,279 Assert.java  
491 StringUtils.java  
403 Log.java  
365 LogFactory.java  
289 ObjectUtils.java  
299 ClassUtils.java  
252 HttpHeaders.java  
222 CollectionUtils.java  
204 MethodParameter.java  
197 MediaType.java

这里面的每个类都只解决了一个小而具体的问题,这些类有一些共同的特征:

  • 大多数构造函数和方法都很简单,只接受一个或更少的参数。
  • 这些类都没有对 Spring Framework 的未来做出假设
  • 这些类都不是可配置的
  • 每个类都解决了在整个代码库中重复出现的问题
回到首页