Exception 您的自定义异常层次结构是什么?

Exception 您的自定义异常层次结构是什么?,exception,Exception,我的问题是:如何在应用程序中创建异常层次结构 设计应用程序的体系结构, 在我看来,我们可能有三种例外情况: 内置的(例如:InvalidOperationException) 自定义内部系统故障(提交时数据库事务失败,DbTransactionFailedException) 自定义业务异常(BusinessRuleViolationException) 类层次结构: 例外情况 MyAppInternalException DbTransactionFailedException My

我的问题是:如何在应用程序中创建异常层次结构

设计应用程序的体系结构, 在我看来,我们可能有三种例外情况:

  • 内置的(例如:InvalidOperationException)
  • 自定义内部系统故障(提交时数据库事务失败,DbTransactionFailedException)
  • 自定义业务异常(BusinessRuleViolationException)
类层次结构:

  • 例外情况
    • MyAppInternalException
      • DbTransactionFailedException
      • MyServerTimeoutException
    • MyAppBusinessRuleViolationException
      • UserName ReadyExistsException

只有MyAppInternalException和MyAppBusinessRuleViolationException会被捕获。

从类型F继承的异常类型E的真正好处显然是当E被一个模块捕获时,该模块并不明确知道E是什么,但知道F。假设继承有意义,模块有合理的希望针对E异常采取正确的纠正措施,因为它是一种E异常

所以我倾向于根据如何合理地处理异常来分类异常。例如,典型的业务流程可能会使用以下内容:

  • ConfigurationException——可以通过更改配置文件来修复的内容。例如,无法分析配置或配置不一致。适当的响应是警告用户修复配置(如果可能,提供有用的提示)
  • InfrastructureException(基础设施异常)——在程序控制之外的资源可能偶尔出现问题,如远程服务器等。适当的响应通常是断开连接并在暂停后重试,如果出现太多故障,则放弃
  • DataException——传入数据中出错的内容。适当的回应是记录投诉(可能还有数据)并忽略此消息
当然,这些可以是子类。但是,对于更接近异常源的模块,该级别的区分通常更有用。如果异常一直冒泡到主模块,那么通常只有几个可能的操作,并且最容易在这些操作和它们响应的
catch
语句之间建立一对一的对应关系。

“UsernameAlreadyExistsException”

我认为您不应该使用异常来控制应用程序的常规流。i、 这是一个常规的商业案例,不应作为例外出现。正确的应用程序设计中不存在MyAppBusinessRuleViolationException


关于,

这是非常主观的,建议编辑您的问题并勾选“社区维基”复选框(以免问题被关闭)。