gpt4 book ai didi

c# - 在 Onion 架构中抛出异常 vs 返回操作结果对象

转载 作者:行者123 更新时间:2023-12-03 07:38:51 25 4
gpt4 key购买 nike

我有一个由 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com