重构18-Replace exception with conditional(条件替代异常)
2016-08-19 09:32
387 查看
重构没有什么出处,是我平时经常使用而总结出来的。欢迎您发表任何改进意见或建议。我相信一定还有其他比较好的重构可以解决类似的问题。
我曾无数次面对的一个代码坏味道就是,使用异常来控制程序流程。您可能会看到类似的代码:
异常应该仅仅完成自己的本职工作:处理异常行为。大多数情况你都可以将这些代码用恰当的条件判断替换,并进行恰当的处理。下面的代码可以称之为契约式设计,因为我们在执行具体工作之前明确了Motor类的状态,而不是通过异常来进行处理。
来自为知笔记(Wiz)
我曾无数次面对的一个代码坏味道就是,使用异常来控制程序流程。您可能会看到类似的代码:
public class Microwave { private MicrowaveMotor Motor;//getter setter public Boolean start(Object food) { Boolean foodCooked = false; try { Motor.Cook(food); foodCooked = true; } catch (InUseException e) { foodcooked = false; } return foodCooked; } }
异常应该仅仅完成自己的本职工作:处理异常行为。大多数情况你都可以将这些代码用恰当的条件判断替换,并进行恰当的处理。下面的代码可以称之为契约式设计,因为我们在执行具体工作之前明确了Motor类的状态,而不是通过异常来进行处理。
public class Microwave { private MicrowaveMotor Motor;//getter setter public Boolean start(Object food) { if (Motor.IsInUse) return false; Motor.Cook(food); return true; } }
来自为知笔记(Wiz)
相关文章推荐
- 重构17-Extract Superclass(提取父类)
- 重构16-Encapsulate Conditional(封装条件)
- 重构15-Remove Duplication(删除重复)
- centos7 安装redis3.06
- listview多种类型条目显示
- Centos7.x系列密码遗忘重置问题
- linux vi命令详解
- 条件查询List集合,由查询的结果,算出一行数据,添加到集合中!
- 详解Angular中$cacheFactory缓存的使用
- startActivityForResult 没有反应
- android mvp模式 总结及个人心得
- Qt实现图片移动
- border-image属性分析
- 使用有源匹配电路改善宽带全差分放大器的噪声性能
- SQL SERVER 修改数据库名称(包括 db.mdf 名称的修改)
- 重构14-Break Responsibilities
- 重构13-Extract Method Object(提取方法对象)
- 重构12-Break Dependencies(打破依赖)
- JSPatch实现原理
- 《Motion Design for iOS》(四十六(最终章))