我有一个由 Onion Architecture 实现的项目,它类似于 Ordering .我需要处理所有层中的验证错误。据我所知,通常有以下两种方法来处理错误:
1- 抛出异常
2- 返回操作结果
In your view, which one is the best?
1- 抛出异常
这是我的方法。正如您在 ValidatorBehavior 中看到的那样, 我用过
ValidatorBehavior
处理与验证我的命令相关的验证错误,例如 this . FluentValidation用于验证输入命令,错误缓存在 Handle
ValidatorBehavior
中的方法.问题之一是
FluentValidation
如果命令无效则抛出异常。此异常可以缓存在 HttpGlobalExceptionFilter 中在 Web API 中。有人说异常是针对意外情况,但是在这个场景(Validation)中,我们知道验证阶段的结果,我们通过抛出异常来实现一些业务规则。
另一个是在
Domain Layer
中使用抛出异常喜欢 StatusChangeException .所以毫无疑问,我们需要在其他层抛出异常。2- 返回操作结果
在我的一些 friend 建议的第二种方法中,我们可以使用 handle errors 通过名为
OperationResult
的对象将这些错误显示给最终用户。 .从性能的角度来看,它似乎更好,因为抛出异常比第一种方法更昂贵。您如何看待这两种方法?我想知道您是否分享了做出最佳决定的想法。
最佳答案
对于异常错误,我通常从所有层中抛出异常,这些异常在全局异常处理程序中处理。这允许我的应用程序和域代码保持“干净”,我的意思是,它可以专注于正常流程而不是处理异常。毕竟,异常是异常(exception)的,不是正常流程的一部分,所以对我来说,它们不应该破坏你的“正常”逻辑。
至于你的性能评论,我认为这并不重要,因为你在这里谈论的是微优化,所以基本上,这不是一个真正的问题。
关于c# - 在 Onion 架构中抛出异常 vs 返回操作结果对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57943702/