间接不是抽象


这篇文章认为接口interface代表的间接和abstract代表的抽象并不是一回事,间接是为了分离,松耦合,而抽象是为了将细节剥离。这是软件设计中两个不同维度。然后他谈了这两种情况的四个组合:

没有间接但是又抽象,也就是直接但抽象,他以String为例子,字符串很直接但很抽象,可以代表很多东西:人的姓名、消息等等,但是直接依赖java.lang.String类型的代码不能移植到Swift / Go / C#。

依赖倒置原则:高级模块不应该依赖于低级模块。两者都应该取决于抽象。与直接和间接无关。

什么时候使用间接?

  1. 您的组件因不同原因而发生变化时,在它和其他每个组件之间使用间接。
  2. 当您的组件无关紧要时,或者当它们不需要更改时,可以使它们直接相互关联。
  3. 如果您不知道某个组件是否会发生变化,使用直接。

什么时候使用抽象?

  1. 您不需要解决通用问题时,让组件具体化。
  2. 当您需要通过多种排列解决非常类似的问题时,让组件变得抽象。
  3. 如果您不知道是否需要解决一系列问题,就使用具体。

让您的软件尽可能简单,直到它变得更加复杂。无论是开发还是使用,复杂的软件都是非常昂贵和痛苦的。