长参数列表
概述
长参数列表是代码异味的一种,指函数或方法接收过多参数的情况。这通常表明该函数承担了过多职责,或者相关数据应该被组织成对象。
关键内容
- 特征识别:
- 方法参数超过4个
- 一些参数总是成对或成组出现
- 布尔参数用于改变方法的行为
- 经常需要传递null或undefined值
-
参数顺序容易混淆
-
负面影响:
- 难以正确调用函数
- 参数顺序容易搞错
- 暗示方法承担了过多职责
- 难以添加新的参数
-
降低了代码的可读性和可维护性
-
重构策略:
- Introduce Parameter Object:将相关参数封装成对象
- Preserve Whole Object:传递整个对象而不是分离的值
- Replace Parameter with Method Call:用方法调用代替参数传递
-
Remove Flag Argument:消除布尔标志参数
-
重构示例: ``` // 重构前:过长的参数列表 function createUser(firstName, lastName, email, phone, street, city, state, zip, isAdmin, isActive, createdBy) { // ... }
// 重构后:参数对象封装 function createUser(personalInfo, address, options) { // personalInfo: { firstName, lastName, email, phone } // address: { street, city, state, zip } // options: { isAdmin, isActive, createdBy } } ```
来源
- Martin Fowler — 《重构:改善既有代码的设计》
- 代码异味 — 重构指导书