什么是夸夸其谈通用性
夸夸其谈的通用性指为想象中的扩展预留的抽象:只有一个实现的接口、只有一个子类的基类、没人传的参数、从未被调用的钩子方法。这类结构带来阅读与维护成本,却不解决任何现实问题。处方是先内联或删除,等第二个真实需求出现时再提取抽象。
基本信息
| 典型信号 | 抽象只有单一实现、参数无人传、方法无人调用 |
|---|---|
| 处方 | 内联类、折叠继承层次、删除无用代码 |
| 指导原则 | 不为假想的未来设计 |
| 保留依据 | 是否有真实调用方或明确排期 |
| 实际代价 | 阅读时不得不理解一层并不存在的可能 |
典型使用场景
- 为以后可能支持多种数据库抽出的接口只有一个实现
- 框架基类里的钩子方法从未被覆写
- 配置项从来没有被设置过,代码里却保留分支
- 参数对象里一半字段在所有调用处都取同一个值
- 抽象工厂加反射配置,最终只装配出一个产品族
清理动作
清理动作
// 只被一个类实现的接口:先内联,等第二个实现出现再提取
// 无人传的参数:删除,需要时再加
// 从未被覆写的钩子方法:删除,或写明预留意向与评审记录
// 提示:公共接口删除前必须做引用检索(含文档与外部调用方)抽象该不该留
| 情况 | 处理 | 理由 |
|---|---|---|
| 只有一个实现且无排期 | 内联或删除 | 抽象只增加一层间接 |
| 已确认短期内会有第二个实现 | 保留 | 有明确时间点与负责人 |
| 对外暴露的扩展点 | 先评估外部调用 | 删除前必须做引用检索 |
判断标准:说得清什么时候会用到、谁负责,就保留;说不清就先删掉。需要时再加的成本,通常低于长期维护假想的成本。
删除对外暴露的接口或方法前必须做引用检索,范围包括仓库代码、文档示例与外部调用方,否则可能删掉别人的入口。