代码重构:临时字段(Temporary Field)
【摘要】 什么是临时字段(Temporary Field)定义:某个实例变量仅为代码中一小部分功能临时所用而创建影响:通常一个对象会需要它的全部的变量。当一个变量看上去没什么用,却要试图了解他为什么在哪里时,会使类的作用变得更难理解,影响了代码的可读性和可维护性改进目标:消除临时字段,提升代码可读性、可维护性方法:提取类;引入特例 案例1代码背景Account为用户账户类,包含用户名、卡号、余额等信...
什么是临时字段(Temporary Field)
- 定义:某个实例变量仅为代码中一小部分功能临时所用而创建
- 影响:通常一个对象会需要它的全部的变量。当一个变量看上去没什么用,却要试图了解他为什么在哪里时,会使类的作用变得更难理解,影响了代码的可读性和可维护性
- 改进目标:消除临时字段,提升代码可读性、可维护性
- 方法:提取类;引入特例
案例1
代码背景
- Account为用户账户类,包含用户名、卡号、余额等信息,以及一些未列举出来的账户信息
- 日常消费中会频繁调用addToBalance、deductBalance、以及其他一些未列举的账户信息处理方法,更新账户信息
- 每半年会调用evaluateAccount和evaluateConsumptionLevel方法,对账户进行一次评估
症状/问题
- name、cardId、balance以及一些未列举的账户信息字段,在账户对象创建后,频繁会被使用。与对象绑定在一起,属于Account中的正常字段。
- maxAsset、usageFrequency、overdueTimes,每半年才被赋值并使用一次。账户对象创建后,多数情况下是空值,毫无用处,属于临时字段
- 改进路线
案例2
代码背景
- RoutingHandler对消息进行路由处理,即我们关注的核心类
- Message为消息体
- 路由的目标对象,通过工厂RouterFactory进行创建
- RouterFactory创建Router接口的实例,即具体的路由对象
症状/问题
- 在handle方法中,我们需要反复对msg.getPriority()是否为空进行判断,priority为空是一种特例,对空的处理少数情况下的处理逻辑,也可归属于临时字段范畴
- 改进路线
问题:在handle方法中,我们需要反复对msg.getPriority()是否为空进行判断,priority为空是一种特例,对空的处理少数情况下的处理逻辑,也可归属于临时字段范畴
解决方案:我们可以使用“引入特例”的方法,为Router加入一个新的实现类,用来专门处理这种少见的逻辑。此时便可将这种“临时的处理”搬移到类外面去
重构对比
总结
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)