重构18-Replace exception with conditional(条件替代异常)

重构没有什么出处,是我平时经常使用而总结出来的。欢迎您发表任何改进意见或建议。我相信一定还有其他比较好的重构可以解决类似的问题。

我曾无数次面对的一个代码坏味道就是,使用异常来控制程序流程。您可能会看到类似的代码:

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 setterpublic Boolean start(Object food) {        if (Motor.IsInUse) return false;Motor.Cook(food);        return true;}}

来自为知笔记(Wiz)

时间: 2024-10-25 05:09:59

重构18-Replace exception with conditional(条件替代异常)的相关文章

重构第18天 用条件语句来代替异常(Replace exception with conditional)

理解:本文中的“使用条件判断代替异常”是指把没有必要使用异常做判断的条件尽量改为条件判断. 详解: 重构前代码: 1 public class Microwave 2 { 3 private IMicrowaveMotor Motor { get; set; } 4 5 public bool Start(object food) 6 { 7 bool foodCooked = false; 8 try 9 { 10 Motor.Cook(food); 11 foodCooked = true;

java异常—检查异常(checked exception)和未检查异常(unchecked exception)

网易面试要我画异常的结构图,什么是检查异常,什么是非检查异常,我当时的表情是这样的,.我看过,忘了.没办法,继续看,写博客掌握. 先来看看异常的结构图,建议你结合JDK一起看. 可以看出异常的家族势力庞大,通常我们说的异常是包括exceptio和error. Exception家族我们恐怕见的不少,但是error家族我们可能就没什么印象了,下面我来说说这两个类的区别: Error(错误):是程序无法处理的错误,表示运行应用程序中较严重问题.大多数的错误与代码编写者执行的操作无关,而是表示代码运行

java中为什么把Checked Exception翻译成受检的异常?

6.Checked Exception(受检的异常) (视频下载) (全部书籍) 马克-to-win:为什么我大胆的把Checked Exception翻译成受检的异常?因为这类异常,编译器检查发现到它后会强令你catch它或throws它(我们之后讲),马克-to-win:而相对于本节前面我们提到的各种比如ArithmeticException,都是unchecked exception(不受检)的异常,unchecked异常都是RuntimeException或者它的子类.马克-to-win

JavaScript利用replace更改所有符合条件字符

利用replace替换字符串时,在正常使用情况下默认只能更改匹配到的第一个字符 var a=new String("fffffddd"); console.log(a.replace("f","a")); 更改后的字符串为:affffddd; 利用正则表达式可以使全部符合条件的字符都更改 var a=new String("fffffddd"); console.log(a.replace(/f/g,"a"

小酌重构系列[14]——使用多态代替条件判断

概述 有时候你可能会在条件判断中,根据不同的对象类型(通常是基类的一系列子类,或接口的一系列实现),提供相应的逻辑和算法.当出现大量类型检查和判断时,if else(或switch)语句的体积会比较臃肿,这无疑降低了代码的可读性.另外,if else(或switch)本身就是一个“变化点”,当需要扩展新的对象类型时,我们不得不追加if else(或switch)语句块,以及相应的逻辑,这无疑降低了程序的可扩展性,也违反了面向对象的OCP原则. 基于这种场景,我们可以考虑使用“多态”来代替冗长的条

C# 6.0:Exception Filter——带条件的异常处理

C#6.0 对异常处理有两处改进,一个是在上一篇文章中我们讨论了的在catch和finally中使用await,另一个是exception filter.在catch和finally中使用await是一个开发者欢迎的功能,无疑exception filter是另一个给开发者处理异常带来极大便利的新功能.那么神秘是exception filter那?它是一个通过返回true或false到catch块中的条件语句帮助我们过滤筛选exception的功能. 下面的代码块是一个exception fil

[转]java异常中Exception捕获不到的异常

一 概念 众所周知java提供了丰富的异常类,这些异常类之间有严格的集成关系,分类为 父类Throwable Throwable的两个子类Error和Exception Exception的两个子类CheckedException和RuntimeException 二 发现问题 通常捕获异常catch的时候最大catch到Exception这个类就为止了,当然这能够处理大部分的异常情况. 但是值得注意的是,Exception不能捕捉到所有的异常.比如InvocationTargetExcepti

检查型异常(Checked Exception)和非检查型异常(Unchecked Exception)的区别

最近温故spring事务相关知识点,我们知道Spring的事务管理默认只对出现运行期异常(java.lang.RuntimeException及其子类)进行回滚 (至于为什么spring要这么设计:因为spring认为Checked的异常属于业务的,程序猿需要给出解决方案而不应该直接扔该框架) 这里就引出一个小的知识点,什么是Checked Exception?什么是Unchecked Exception? 其实,Java语言规范对这两个定义十分简单,将派生于Error或者RuntimeExce

Exception encountered during context initialization_异常之一

Unsatisfied dependency expressed through constructor parameter 0: Ambiguous argument values for parameter of type [redis.clients.jedis.HostAndPort] - did you specify the correct bean references as arguments? 先记录下来 java.lang.IllegalStateException: Fai