简介
"删除标志参数"(Remove Flag Argument)重构手法用于消除控制方法行为的布尔型参数。当方法通过布尔参数执行不同分支的逻辑时,应该拆分为多个独立的方法。
典型代码坏味道
- 方法内部存在条件分支检查布尔参数
- 方法名称无法清晰表达所有功能
- 调用方需要传递true/false控制方法行为
重构步骤
-
识别标志参数
- 查找接受布尔参数的方法
- 分析参数控制的逻辑分支
- 确定每个分支的独立语义
-
创建独立方法
- 为每个分支创建新方法
- 将对应逻辑迁移到新方法
- 保持原方法作为过渡
-
修改调用方
- 替换所有传递true的调用点
- 替换所有传递false的调用点
- 更新单元测试用例
-
移除原方法
- 删除包含标志参数的方法
- 清理相关文档注释
- 验证接口兼容性
示例
重构前:
public class OrderService {
// 标志参数控制导出格式
public void exportOrder(Order order, boolean isPDF) {
if (isPDF) {
generatePDF(order);
} else {
generateCSV(order);
}
}
}
重构后:
public class OrderService {
public void exportOrderAsPDF(Order order) {
generatePDF(order);
}
public void exportOrderAsCSV(Order order) {
generateCSV(order);
}
}
专项练习
基础练习
-
重构消息通知方法
class Notification { public void send(String message, boolean isUrgent) { if (isUrgent) { sendSMS(message); } else { sendEmail(message); } } }
进阶练习
-
多重标志参数处理
class ReportGenerator { public void generate(ReportData data, boolean includeSummary, boolean formatForWeb) { // 复杂的分支逻辑... } }
代码审查清单
优势验证
- 方法调用意图更清晰
- 消除条件分支复杂度
- 增强方法的内聚性
风险提示
- 可能增加方法数量
- 需要更新所有调用方
- 影响已发布的API接口