小接口与组合Small interfaces and composition

用尽量小的行为契约连接组件,将额外能力表达为可选接口。

核心约束
满足基础契约即可参与组合;可选路径仍须保持相同语义。
适用问题
输入输出流、存储适配层、可替换执行器及分层库接口。
边界与取舍
包装器可能隐藏可选能力;接口变小并不自动保证正确或高效。

常见操作#

以 Go io.Reader、io.Writer 和可选能力接口为例。

操作时间成本条件与说明
按最小能力调用接口分派 + 被调用实现的实际工作接口方法数少不意味着运行时总成本小;具体实现仍决定 I/O、分配和阻塞。
选择能力专用路径类型 / 能力判断 + 专用实现例如 Copy 优先使用 WriterTo 或 ReaderFrom,可省去通用缓冲循环。

实施成本#

时间成本
没有统一渐进界,应分析具体调用路径
空间成本
接口值、适配器及实现持有的资源

收益在于减少调用方必须了解的能力、使组合和测试更容易;过度拆分也会增加适配层和诊断成本。

工程中的应用#

3 个案例 · 附源码
原始实现与接口资料

Go 1.23 · io interfaces and copy dispatchReader / Writer 的最小契约及 WriterTo / ReaderFrom 可选优化路径。

5 个概念