是什么
内联类(Inline Class)把一个已经不再有独立价值的类合并回它的使用方:类里的字段与行为搬到调用处,原来的类型随即删除。它常用于处理过度提炼的产物——某个类当初被拆出来是为了承载一项职责,后来这项职责被移走或消失,类只剩一层包装。它与提炼类互为逆操作,两者都是让代码边界与当前需求对齐。
识别与做法
| 信号 | 类只剩一两个方法,或方法体全是取值赋值 |
|---|---|
| 信号 | 与使用者几乎同生命周期,创建后立即被消耗 |
| 做法 | 成员搬到使用方,更新全部引用,再删除旧类型 |
| 反向操作 | 提炼类:职责增多到需要独立边界时再拆出去 |
典型使用场景
- 只有一个使用方的辅助类:抽象没有带来复用价值,反而增加跳转层级
- 纯数据载体:字段加上满屏取值赋值方法,行为其实都在别处
- 过度提炼:为拆分而拆分产生的小类,职责一句话说不清
- 职责被搬空:原有逻辑已迁走,剩下的方法只是转发
- 局部范围对象:为一次调用而临时创建的类型,调用方构造函数比它更直观
判断线索
判断线索
# 判断该不该内联
类名 ShippingPlan 只有两个字段和 getter/setter → 考虑内联
search() 里唯一的局部变量类型只在本方法内使用 → 考虑内联
该类被三个模块引用,且各自定制行为 → 保留,属于真实抽象内联前检查
| 检查项 | 原因 |
|---|---|
| 是否存在外部使用者 | 公共类型删除属于破坏性变更,需先确认调用面 |
| 是否有独立变化轴 | 类是否需要单独演进,是则不应内联 |
| 是否承担横切职责 | 校验、埋点、权限等职责搬走会改变语义,需保留 |
| 使用方是否已有过多字段 | 内联后字段继续膨胀,说明拆分方向本就选错了 |
| 序列化与反射依赖 | 部分框架依赖类型名,删除类型会影响配置与存储格式 |
内联后如果使用方的字段与方法数量明显膨胀,先停下来复核方向:这通常说明最初的拆分对象选错了,应改为把职责重新分配到另一个类,而不是简单地合并掉。
内联与提炼是一对可以反复使用的工具。先内联到使用方让逻辑集中,看到真实的变化点之后再重新提炼,比在错误边界上反复调整更省力。
落地检查清单
- 确认该类型没有外部使用者,或已完成替换
- 把字段与行为搬到使用方,逐步替换引用而不是一次改完
- 删除旧类型后跑一遍完整测试与序列化相关用例
- 检查内联后使用方是否仍然职责清晰