什么是数据泥团
数据泥团指两三个字段或参数总是一起出现:开始与结束时间、经纬度、主机与端口。它们往往还共享同一套判空与校验逻辑,被复制到多个地方。处方是用提取类或引入参数对象把它们合并成一个类型,并顺手把重复的校验搬进新类型,既缩短参数列表,也减少遗漏机会。
基本信息
| 典型信号 | 两个以上字段总是同行出现,判空与校验逻辑重复 |
|---|---|
| 处方 | 提取类 / 引入参数对象 |
| 收益 | 参数列表变短,校验与格式化有了归属 |
| 相邻问题 | 基本类型偏执、依恋情结 |
| 判断标准 | 其中一个字段单独出现时是否还有意义 |
典型使用场景
- 时间区间在多个方法里以两个参数成对传递
- 地址被拆成多个参数一路透传
- 主机名与端口成对出现在每个连接相关签名里
- 配置项散落在多个类中,各自重复校验
- 导出功能里同一组列名在多处重复维护
合并前后
合并前后
// 之前:两个参数总是成对出现,校验逻辑重复
createEvent(String start, String end, String title)
// 之后:合并为一个类型,校验只需要写一次
createEvent(TimeRange range, String title)
// TimeRange 内部负责:格式校验、先后顺序校验、区间长度计算要不要合并
| 情况 | 结论 | 理由 |
|---|---|---|
| 字段成对出现且总有校验 | 合并 | 校验逻辑可集中到新类型 |
| 字段恰好相同但语义不同 | 不合并 | 强行合并会制造误读 |
| 只是两个参数偶尔同行 | 先观察 | 过度建模增加维护成本 |
合并的重点是搬行为:如果新类型只是字段容器,取值与校验仍散落在调用方,泥团只是换了包装。让新类型自己回答这个区间是否合法这类问题。
语义不同的组合不要合并:名字相同不代表概念相同,错误的抽象比重复参数更难拆开。