Onion架构中抛出异常与返回操作结果对象

Ali*_*ani 5 c# architecture error-handling onion-architecture

我有一个由 Onion Architecture 实现的项目,它与Ordering类似。我需要处理所有层中的验证错误。据我所知,一般有以下两种方法来处理错误:

1-抛出异常

2-返回操作结果

在您看来,哪一个最好?

1-抛出异常

这是我的方法。正如您在ValidatorBehavior中看到的,我曾经像这样ValidatorBehavior处理与验证我的命令相关的验证错误。 FluentValidation用于验证输入命令,错误缓存在.HandleValidatorBehavior

问题之一是FluentValidation如果命令无效则抛出异常。此异常可以缓存在Web API 中的HttpGlobalExceptionFilter中。

有人说异常是针对意外情况的,但在这种情况下(验证),我们知道验证阶段的结果,并且我们通过抛出异常来实现一些业务规则。

另一种是使用抛出异常,Domain LayerStatusChangeException。所以毫无疑问,我们需要在其他层抛出异常。

2-返回操作结果

在我的一些朋友建议的第二种方法中,我们可以使用处理错误,通过名为的对象向最终用户显示这些错误OperationResult。从性能角度来看,它似乎更好,因为抛出异常比第一种方法更昂贵。

您对这两种方法有何看法?我想知道您是否分享您的想法以做出最佳决定。

L-F*_*our 0

对于异常错误,我通常从所有层中抛出异常,这些异常在全局异常处理程序中进行处理。这允许我的应用程序和域代码保持“干净”,我的意思是,它可以专注于正常流程而不是处理异常。毕竟,异常是异常的,不是正常流程的一部分,所以对我来说,它们不应该拉扯你的“正常”逻辑。

至于您的性能评论,我认为这并不重要,因为您在这里谈论的是微优化,所以基本上,这不是一个真正的问题。