c# - 如果需要,使用许多业务异常是否正常?

标签 c# architecture exception

定义和抛出自定义异常是否是一种好的做法,即使应用程序需要大量异常也是如此?

  • EntityNotFoundException
  • EntityAlreadyExistsException
  • EntityNotUniqueException
  • EntityNotAddedException
  • EntityNotUpdatedException
  • EntityNotDeletedException
  • QuizOverException
  • QuizExpiredException
  • TableAlreadyBookedException
  • EndDateMustBeGreaterThanStartDateException

我尝试为这些示例异常名称命名,以尽可能准确地描述它们的用途。我希望他们能了解我想问的问题。

不要将您的想象力局限于这些异常(exception)情况,而是应用程序生命周期中可能出现的所有情况。同时考虑 CRUD 和业务异常。

我知道抛出和捕获异常在性能方面是一个代价高昂的过程,但它们是否提供了一种更优雅的应用开发方式?

  • 抛出 EntityNotFoundException 而不是编写 if 语句来检查实体是否为 null 不是更好吗?
  • 抛出一个 EntityAlreadyExistsException 而不是编写一个额外的 if 语句来调用一个方法来检查具有给定 ID 的实体是否已经存在的方法不是更好吗?
  • 抛出 EntityNotAddedException 而不是检查指定事务是否成功的 bool 类型的返回值不是更好吗?如果我们想返回一个对象怎么办?

我觉得答案会像“你不应该使用 EntityNotFoundException 而是检查是否为 null,但你应该使用 EntityAlreadyExistsException”,“没有 chalice ".

我想知道这样做的优雅方式是什么?

最佳答案

请记住,异常(exception)情况应该代表异常(exception)情况,您所有的问题只能真正得到答案 - 视情况

您打算何时何地抛出特定异常的上下文自然会决定它是否有意义。例如,如果您尝试检索一个应该存在但实际上不存在的实体,那么抛出一个EntityNotFoundException 将被认为是合适的,因为我们现在有一个异常 情况。另一方面,如果您在创建新实体之前检查该实体是否已经存在,那么您可能会争辩说,因为我们知道该实体有可能存在或可能不存在,所以这并不是真正的异常(exception)情况。

就像我说的,这真的取决于情况的上下文和你的应用程序的性质,你是否应该抛出异常,但是,你不想最终做的一件事是控制程序流有异常(exception)。

为了帮助区分何时适合使用异常与业务逻辑,只需问自己“这种特定情况有效吗?”或者换句话说“是否适合应用程序发现自己处于这种状态?”。如果答案是肯定的,使用逻辑来控制应用程序的流程并处理这种情况,否则你想抛出一个 Exception 来有效地中断程序流程并通知用户事情不是非常正确。

关于c# - 如果需要,使用许多业务异常是否正常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17968999/

相关文章:

c# - 你如何让继承的实例变量变得清晰?

c# - 无论如何使用 asp.net mvc 从 3 个图像 URL 中制作一个图像?

c# - 具有多个业务线数据库的 .NET 应用程序设计

architecture - flutter 嵌套的 StreamBuilders 导致错误状态 : Stream has already been listened to

c++ - int 除以 0 的异常捕获

c# - 将 DataGrid 的一部分从表单传递到另一个表单(有条件)

C# - 编译器错误 - 将 int[] 分配给 object[]

node.js - Grails 作为单个应用程序或不同的后端和前端应用程序

java - 如何获得抛出我创建的自定义异常的方法?

php - fatal error :未捕获的异常 'Zend_Session_Exception' 带有消息“Zend_Session::start()”