我们一起来读书吧 关注:159贴子:3,215
  • 0回复贴,共1

《重构》第十一章- 重构API

只看楼主收藏回复

1. 将查询函数和修改函数分离
- 目的:提高函数的单一职责
- 方法:将同时包含查询和修改操作的函数拆分为两个独立函数
- 示例:将`getTotalOutstandingAndSendBill()`拆分为`getTotalOutstanding()`和`sendBill()`
2. 函数参数化
- 目的:增加函数的灵活性和复用性
- 方法:将函数中的硬编码值替换为参数
- 示例:将`tenPercentRaise()`改为`raise(percentage)`
3. 移除标记参数
- 目的:简化函数调用,提高代码可读性
- 方法:用多个专门的函数替代使用标记参数的通用函数
- 示例:将`setDimension(name, value)`改为`setHeight(value)`和`setWidth(value)`
4. 保持对象完整
- 目的:减少参数列表,简化函数调用
- 方法:传递整个对象,而不是从对象中抽取多个值作为参数
- 示例:将`circum(radius)`改为`circum(circle)`
5. 以查询取代参数
- 目的:简化函数调用,减少参数依赖
- 方法:将参数替换为对参数提供者的查询
- 示例:将`availableVacation(employee, month)`改为`employee.availableVacation(month)`
6. 以参数取代查询
- 目的:减少函数的副作用,提高函数的纯粹性
- 方法:将函数内部的查询替换为参数
- 示例:将`targetTemperature()`中的`thermostat.currentTemperature`替换为参数
7. 移除设值函数
- 目的:增强对象的不可变性
- 方法:移除不必要的设值函数,仅在构造函数中设置字段
- 示例:移除`setId()`方法,只允许在构造函数中设置id
8. 以工厂函数取代构造函数
- 目的:提供更灵活的对象创建方式
- 方法:使用工厂函数封装复杂的对象创建逻辑
- 示例:用`createEmployee(name, type)`替代`new Employee(name, type)`
9. 以命令取代函数
- 目的:将复杂函数封装为对象,便于扩展和自定义
- 方法:创建一个包含execute方法的命令对象
- 示例:将`score(candidate, medicalExam, scoringGuide)`改为`Scorer`类
10. 以函数取代命令
- 目的:简化不需要复杂封装的操作
- 方法:将简单的命令对象替换为普通函数
- 示例:将`ChargeCalculator`类替换为简单的`calculateCharge()`函数


IP属地:北京1楼2024-08-09 14:35回复