幸福框架:应当如何使用和处理异常
常见异常使用场景:
- 以写(有副作用)为目的的方法尽量将返回值标记为void,用异常来表示失败,这样你的代码会非常简洁,不会出现大量的条件语句。
- 简洁的版本
1 public void ChangeUseame(Guid userId, string newUseame) 2 { 3 var user = _userRepository.get(userId); 4 5 if(_UseameRule.Validate(newUseame)) 6 { 7 throw new UseameInvalidException("用户名不符合规则"); 8 } 9 10 if(_UseameIndex.Validate(newUseame))11 {12 throw new UseameIndexException("用户必须唯一");13 }14 15 user.ChangeUseame(newUseame);16 }
- 更简洁的版本
1 public void ChangeUseame(Guid userId, string newUseame) 2 { 3 var user = _userRepository.get(userId); 4 5 _UseameRule.DoValidate(newUseame); 6 7 _UseameIndex.DoValidate(newUseame) 8 9 user.ChangeUseame(newUseame);10 }
- 简洁的版本
- 以读(无副作用)为目的的方法在出现前者条件不满足时,尽量少用异常而多用“Null Object”,这样你的代码会非常简洁,不会出现大量的条件语句。(省略代码)
常见异常处理策略:
- 让异常冒泡,你做出这种选择,一般是因为在调用层次的下端,此时你不知道如何从异常中恢复,你希望异常冒泡到上层某个集中的地方,在上层做统一的日志操作或其它操作。
- 处理并吞掉异常,你做出这样选择,一般是因为在调用层次的最上端,此时你不希望将异常信息穿过系统边界直接显示在UI中或者导致应用程序终止,你希望在此处对异常做最终的特殊处理,或者将合适的异常信息提示给用户,或者将合适的异常信息记录到日志中。
- 处理并重新抛出异常,你做出这样的选择,一般是因为在调用层次的中间,此时你试着对异常进行一些处理,或者是希望从异常中恢复,或者是希望记录一下异常日志,如果你不能从异常中恢复,最好要重新抛出改异常。
- 处理并抛出新的异常,你做出这样的选择,一般是因为某些异常你希望提示给UI,但是UI中不能显示敏感的信息,因此你选择新建一个异常。
- 处理并抛出包装的异常,你做出这样的选择,一般是为了整合不同的框架,如NHibeate和EntityFramework,你希望Domain层面对的是包装过的异常,这样Domain层的代码才能真正意义的和具体的数据库访问技术解耦。
- 将合理的异常显示给UI,你做出这样的选择,一般是因为你接受了结构化异常处理这一新的理念,而不是采用状态码表示操作结果,此处可以采用AOP机制实现。
- 最终要监控没有被处理的异常,你必须选择这一选项,每种Application类型都提供了自己的选项,请使用。
来源链接:https://www.cnblogs.com/happyframework/archive/2013/04/09/3010082.html
版权声明:
1、JavaClub(https://www.javaclub.cn)以学习交流为目的,由作者投稿、网友推荐和小编整理收藏优秀的IT技术及相关内容,包括但不限于文字、图片、音频、视频、软件、程序等,其均来自互联网,本站不享有版权,版权归原作者所有。
2、本站提供的内容仅用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯相关权利人及本网站的合法权利。
3、本网站内容原作者如不愿意在本网站刊登内容,请及时通知本站(javaclubcn@163.com),我们将第一时间核实后及时予以删除。