Go 语言
接口
定义小接口

定义小接口

Go 推荐定义小接口。

接口就是将对象的行为进行抽象而形成的契约。契约有繁有简,Go 选择了去繁就简。主要体现在两点下:

  • 契约的自动遵守:Go 语言中接口与其实现之间的关系是隐式的;
  • 小契约:表现在代码上便是尽量定义小接口;

小接口的优势

小接口收到青睐的是因为它有如下几点优势:

  • 接口越小,抽象程度越高,被接纳度越高;
  • 易于实现和测试;
  • 契约的职责单一,易于复用组合;

我们来看一个例子:

type Flyable interface {
    Fly()
}
 
type Swimmable interface {
    Run()
}
 
type FlySwimmable interface {
    Flyable
    Swimmable
}

如何定义小接口

这道题没有标准答案,但有一些点可供大家在实践中考量或遵循;

  • 抽象出接口:要设计和定义小接口,需要先有接口;在定义小接口之前,我们需要首先深入理解问题域,聚焦抽象并发现接口;初期不要在意接口的大小。
  • 将大接口拆分为小接口:有了接口后,我们就会看到接口被用在代码的各个地方,这时我们可以根据接口的使用情况,将大接口拆分为小接口;
  • 接口的单一契约职责:小接口是否需要拆分到每个接口只有一个方法,这一点依然没有标准答案,但可以用单一契约职责原则来指导。