ana*_*lov 1 c# architecture exception-handling
即使应用程序需要很多自定义异常,定义和抛出自定义异常也是一种好习惯吗?
我试着将这些示例异常名称命名为尽可能好地描述它们的目的.我希望他们可以形成一个我想要问的想法.
不要仅仅考虑这些例外情况来限制你的想象力,而是在应用程序生命期间可能出现的所有情况.考虑CRUD和业务异常.
我知道抛出和捕获异常在性能方面是一个昂贵的过程但是它们不能提供更优雅的方式来开发你的应用程序吗?
EntityNotFoundException
而不是写一个if语句来检查实体是否为空是不是更好?EntityAlreadyExistsException
而不是写一个额外的if语句来调用一个方法来检查具有给定Id的实体是否已经存在?EntityNotAddedException
而不是检查bool类型的返回值来指定事务是否成功不是更好吗?如果我们想要返回一个对象怎么办?我觉得答案就像是"你不应该使用EntityNotFoundException
,而是检查是否为null,但你应该使用EntityAlreadyExistsException
","没有圣杯".
我想知道这样做的优雅方式是什么?
请记住,例外情况应该代表特殊情况,所有问题都只能真正回答 - 这取决于具体情况.
您打算抛出特定异常的时间和地点的上下文自然会决定它是否有意义.例如,如果您尝试检索应该存在但不存在的实体,那么抛出一个EntityNotFoundException
将被认为是合适的,因为我们现在有一个特殊的情况.另一方面,如果你在创建新实体之前检查实体是否已经存在,那么你可以争辩说,因为我们知道实体可能存在或者可能不存在,那么它实际上并不是特殊情况.
就像我说的那样,它实际上取决于情境的上下文和应用程序的性质,无论你是否应该抛出异常,但是,你最不想做的一件事就是控制带有异常的程序流.
为了帮助区分何时适合使用异常与业务逻辑,只需问自己" 这种特殊情况是否有效? "或换句话说" 应用程序是否可以在此状态下找到自己? ".如果答案是肯定的,使用逻辑来控制应用程序的流程并处理这种情况,否则你想抛出一个Exception
有效的中断程序流并告知用户某些东西不太正确.