博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
.NET:再论异常处理,一个真实的故事
阅读量:6095 次
发布时间:2019-06-20

本文共 694 字,大约阅读时间需要 2 分钟。

背景

关于是使用枚举或布尔类型来表示方法执行状态,还是使用异常,可以参考这里的文章:。

今天贴出一个真实的场景(一个朋友重构之前和之后的代码)供大家参考。

一个朋友的示例

重构前

重构后

示例分析

重构前

使用枚举或布尔类型来表示方法执行状态,导致程序中出现了大量的if(xxx){ //异常流程处理 },这部分代码会充斥到所有地方,程序中包括了对异常路径的处理,随着调用栈的深度增加,编程更不爽,如:需要在下层的枚举状态之上再扩展自己的枚举状态。

重构后

用异常代表方法执行失败的状态,在边界类(控制器)中采用AOP的方式拦截异常并自动输出友好的Action Result给浏览器,程序中只有正常的代码,看起来非常清晰。

有朋友会问:如果某些异常需要个性化处理咋办?,答:扩展你的AOP逻辑。更简单的做法是使用自定义异常 + catch就行了,没有被catch的异常还是会被拦截。

备注

关于什么情况使用异常?什么情况使用返回结果?只有一条原则:不要用异常处理正常的业务逻辑。

一个示例

你希望获取验证信息,然后对此做进一步的处理(包装成UI友好的信息),这时用异常明显不合理。而如果出现了验证失败,程序要立即结束,对于刚才包装好的验证信息,可以采用异常的形式返回给UI,代码如下:

1 var validationResult = entity.Validate()2 if(!validationResult.IsValid())3 {4    throw new InvalidationException(CreateMessage(validationResult));5 }

 

转载地址:http://qrgwa.baihongyu.com/

你可能感兴趣的文章
实现一个列表变成字典的转换
查看>>
Linux学习之CentOS(三十四)--配置域主DNS服务器
查看>>
部分xcode插件可能有新版本
查看>>
Provisioning Services 7.6 入门到精通系列之一:PVS前期规划
查看>>
centos6.2 LNMP 环境安装(yum)
查看>>
python 3 用户输入和格式化输出
查看>>
9.1磁盘
查看>>
cisco syslog 总结
查看>>
Win8Metro(C#)数字图像处理--2.4图像颜色聚类
查看>>
iftop笔记
查看>>
页面效果,给手机发送验证码
查看>>
python代码规范
查看>>
自动化运维工具Ansible实战(一)安装部署
查看>>
父元素与子元素的width关系
查看>>
史上最详细的vsftpd配置文件讲解
查看>>
Win8 Metro(C#)数字图像处理--2.70修正后的阿尔法滤波器
查看>>
用netstat -ano查看本机端口详解
查看>>
FineReport中如何自定义登录界面
查看>>
hadoop集群环境搭建
查看>>
严格就是大爱
查看>>