A Philosophy of Software Design读书笔记——异常处理

软件复杂度的最重要来源是异常处理

为什么异常增加复杂度

异常来源:

1、方法调用者提供错误的参数

2、无法完成请求,比如IO异常

3、分布式系统中不可靠的网络

4、代码中监测到bug,不一致的地方,或者代码正常情况下不应该处理的情况等

异常处理代码比正常流程代码更难写。

异常处理代码可能带来更多的异常

太多的异常

现代编码倾向于尽可能的抛出异常,导致异常太多。

倾向于把异常抛出给调用者,让调用者处理异常,避免中断正常处理流程,但是这会增加系统复杂度。

异常也是接口的一部分,抛出异常简单,处理异常很难,最好的解决方法之一:是尽可能的减少异常。

定义异常

最好的减少复杂度方法是把异常排除在接口之外

例子:windows系统中删除文件

如果文件被使用,windows中无法删除该文件,用户必须搜寻打开该文件的进程,然后kill掉,才能删除文件。

Unix这时会标记文件被删除,然后立即返回成功。

作者赞赏Unix的做法,它不会向用户抛出异常,包括删除者和正在使用该文件的人

屏蔽异常

减少异常复杂度的第二个方案是:把异常尽可能在底层模块解决,这样高层模块就不会感知到这些异常,好的例子:TCP,处理丢包、乱序、拥塞问题。

异常合并

减少异常复杂度的第三个方案是:异常合并,在一处处理较多的异常。这样把多个异常合并为一个,调用者只需要集中处理这一个异常。

Crash

减少异常复杂度的第三个方案是:系统crash,如果异常无法处理或者不值得处理,简单的方式就直接crash,例如OOM错误

把特殊case抽象出来

特殊case一般都在if中,如果太多,会导致代码难懂并且容易出bug。特殊case应该尽可能的避免,最好的方式是在设计正常case时自动的处理特殊case

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值