Go语言精进之路读书笔记第27条——尽量定义小接口
接口越大,抽象程度越低 —— Rob Pike,Go语言之父
27.1 Go推荐定义小接口
无论标准库还是社区项目,都遵循了“尽量定义小接口”的建议,方法数量在1~3个范围内的接口占了绝大多数。
27.2 小接口的优势
1.接口越小,抽象程度越高,被接纳度越高
抽象程度越高,对应的集合空间越大。无方法的空接口interface{},空接口的这个抽象对应的事物集合空间包含了Go语言世界的所有事物。
2.易于实现和测试
3.契约职责单一,易于复用组合
Go的设计原则推崇通过组合的方式构建程序,一般会先尝试通过嵌入其他已有接口类型的方式来构建新接口类型。
27.3 定义小接口可以遵循的一些点
1.抽象出接口
在定义小接口之前,我们需要首先深入理解问题域,聚焦抽象并发现接口。
初期不要在意接口的大小,因为对于问题域的理解是循序渐进的,期望在第一版代码中直接定义出小接口可能并不现实。
越偏向业务层,抽象难度越高。
2.将大接口拆分为小接口
分析哪些场合使用了接口的哪些方法,是否可以将这些场合使用的接口的方法提取出来放入一个新的小接口中。
3.接口的单一契约原则
选择那些新接口类型需要的契约职责,不要引入我们不需要的契约职责。