如何进行业务重构

当一个业务功能不断增加能力时,问题通常不在于内容变多,而在于不同变化逐渐共享了状态、规则和处理流程。此时,新增一个小需求也可能影响多个模块。

重构要解决的不是某个局部是否整洁,而是如何重新组织职责和依赖,让需求变化停留在正确的边界内。

重构目标

重构的核心目标是缩小变化半径,也就是减少一次需求变化实际影响的范围。

一个合理的重构结果应该满足下面几点:

  • 不同变化轴有明确的职责归属;
  • 状态由真正产生变化的模块管理;
  • 数据获取、数据转换、业务规则和流程编排彼此分开;
  • 模块之间通过稳定的输入、输出或事件协作;
  • 新增需求只改动对应的职责模块,规则验证也只覆盖该模块。

文件数量和层级深度只是结构变化的结果,不能单独作为重构是否成功的标准。

目标结构

可以先把系统抽象成输入、模块、流程和结果四个层次。

下面的关系图对比了当前结构和目标结构:当前结构中,多个变化来源直接进入共享状态;目标结构中,变化先进入对应模块,再由流程层组织最终结果。

这套结构不要求所有层次都物理分离,而是要求职责和依赖关系清晰:

  • 输入层负责外部数据和前置条件;
  • 模块层负责业务状态和规则;
  • 流程层负责组织多个模块的协作;
  • 结果层负责校验后的转换和保存。

表单权限案例

假设系统中存在一个表单权限功能。管理员需要为不同页面和设备配置字段状态,并处理个性化页面、移动端 Web 视图、页面入参以及 PC 与移动端的一致性校验。

早期实现通常会把页面选择、权限配置和保存流程放在同一条协作链路中。功能较少时,这样做成本较低;随着需求增加,页面结构、字段规则、参数映射和保存校验开始共享状态,新增一个小需求也可能牵动整个配置流程。

这个案例的关键不是配置项有多少,而是它包含了多条变化轴。

变化轴具体行为
页面选择页面树、个性化页面、PC 页面、移动页面和 Web 视图
页面结构页面结构、实体字段、控件状态和字段映射
字段权限可见性、只读、禁用、必填、初始值和状态表达式
页面入参入参识别、已有值回填和参数映射
一致性校验PC 与移动端的配置比较和错误提示
结果保存配置合并、版本处理和最终结果转换

如果这些变化都由同一个模块管理,页面规则、字段规则和保存规则就会互相影响。重构需要做的是让变化轴和职责边界重新对应起来。

如何设计业务重构

划分职责边界

根据表单权限的变化轴,可以划分出下面几个相互协作的模块和一个配置流程:

变化轴承担者职责
页面选择页面选择模块可用页面、页面类型和页面关系
页面结构页面模型把页面结构转换成实体字段和可配置项
字段权限权限模块字段状态和权限规则
页面入参参数模块页面入参和参数映射
一致性校验校验模块配置约束和多端一致性
结果保存配置流程组织选择、编辑、校验和保存

这些模块不一定需要独立实现,代码可以合并,但职责和状态归属不能合并。

明确状态所有权

状态应归属于产生它的模块。页面选择状态由页面选择模块管理,页面结构状态由页面模型管理,字段状态由权限模块管理,参数映射结果由参数模块管理,PC 与移动端的比较结果由校验模块管理,保存状态由配置流程管理。

配置流程可以组合这些状态,但不应直接修改其它模块的内部状态。跨模块变化通过明确的输入、输出或事件完成。

控制依赖与协作方式

配置流程统一编排页面选择、参数处理、权限编辑、校验和保存。各模块只依赖完成自身职责所需的输入,只对外提供完成协作所需的结果,不读取其它模块的内部状态。

页面选择模块不需要了解字段权限规则,权限模块也不需要了解页面数据的获取过程。

如何执行业务重构

表单权限的重构可以按下面的顺序推进:

  1. 梳理现有职责、变化轴和依赖关系,建立共同的系统模型;
  2. 找出变化频繁且影响范围最大的耦合点,确定第一批重构边界;
  3. 先分离页面数据转换、权限规则和一致性校验;
  4. 调整状态所有权,让页面、权限和校验状态回到各自模块;
  5. 重新整理模块之间的依赖方向和协作方式;
  6. 调整展示和交互,让界面围绕已经明确的权限能力组织;
  7. 用后续需求验证边界是否稳定。

这个顺序的重点是先处理变化关系,再调整结构位置。直接移动实现只能改变位置,不能改变依赖关系。

重构也不一定一次完成。可以先稳定输入和输出,再逐步替换内部实现。每一步都应该保留已有行为,并明确验证范围。

如何验证重构结果

验证重构是否有效,不看模块数量,而看后续需求能否沿着已划分的边界局部处理。可以从三个方面检查:

  • 变化范围:新增页面筛选、字段规则或参数配置时,是否只影响对应模块;
  • 依赖关系:模块之间是否通过稳定输入输出协作,是否存在跨模块读取状态;
  • 验证成本:规则变化是否可以在受影响的模块内完成验证,而不是每次都覆盖整个配置流程。

总结

进行业务重构时,关键是完成三件事:

  1. 找到被共享状态、共享规则和共享入口绑定在一起的变化;
  2. 按变化原因划分职责边界,让页面、权限、参数、校验和流程各自承担清晰职责;
  3. 用后续需求验证变化是否能够落在正确模块。

重构的结果不一定是更多模块,而应该是更小的变化半径,让系统能够沿着清晰的边界继续演进。