十三、异常处理
正确的处理异常和管理异常信息是后续问题追踪的好帮手。
关于异常
异常一般是指运行期(此处特指Exception类)会发生的导致程序意外中止的问题,是一种对问题的描述后的封装对象。
在过去开发中,通常异常由系统运行时出错抛出,但现在的开发过程中,我们应在程序开发中合理的抛出异常,比如更新一条不存在的实体,或查询一个不存在的数据等等。
异常处理几种方式
不处理,直接中断程序执行(不推荐)
通过
try
catch
finally
处理(不推荐)全局统一处理,并记录异常信息(推荐)
异常注解方式处理(推荐)
最佳处理异常方式
Hoa Framework 框架内提供了一种非常人性化的异常处理操作,无需干扰业务代码,又能实现异常处理共享。只需要在可能出现异常的业务方法申明出贴 [IfException]
特性即可,然后通过 Oops.Set(code)
方法设置异常状态码。如:
[IfException(2000, "用户不存在")]
[IfException("SERVER_ERROR", "服务器异常")]
public void Update(DtoModel dto)
{
var data = _testRepository.Entity.Single(u => u.Id == dto.Id)
?? throw Oops.Set(2000); // 设置异常状态码
data.Name = dto.Name;
_testRepository.Update(data);
throw Oops.Set("SERVER_ERROR"); // 设置异常状态码,支持字符串
}
通过 [IfException]
异常处理方式,可以有效的分离业务代码和异常信息。
这样的做法有很多好处:
保持干净的业务代码
异常状态码、异常信息统一管理
支持多语言配置
最佳实践
统一配置错误信息
public class OopsCodeMessage
{
public const string @2000 = "The Member Not Found.";
public const string @2001 = "The Member Is Lock.";
public const string @2002 = "The Member Is Expired.";
}
使用
[IfException(2000, OopsCodeMessage.@2000)]
[IfException(2002, OopsCodeMessage.@2002)]
public void Update(DtoModel dto)
{
var data = _testRepository.Entity.Single(u => u.Id == dto.Id)
?? throw Oops.Set(2000); // 设置异常状态码
throw Oops.Set(2002); // 抛出异常
}
最后更新于
这有帮助吗?