Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Onion体系结构中引发异常与返回操作结果对象_C#_Error Handling_Architecture_Onion Architecture - Fatal编程技术网

C# Onion体系结构中引发异常与返回操作结果对象

C# Onion体系结构中引发异常与返回操作结果对象,c#,error-handling,architecture,onion-architecture,C#,Error Handling,Architecture,Onion Architecture,我有一个由洋葱架构实现的项目,它类似于。我需要处理所有层中的验证错误。据我所知,通常有以下两种方法来处理错误: 1-引发异常 2-返回操作结果 在你看来,哪一个是最好的 1-引发异常 这是我的方法。如中所示,我使用了ValidatorBehavior来处理与验证命令相关的验证错误,如。用于验证输入命令,错误缓存在ValidatorBehavior中的Handle方法中 问题之一是FluentValidation在命令无效时抛出异常。此异常可以缓存在web API中 有人说异常是针对意外情况的,但

我有一个由洋葱架构实现的项目,它类似于。我需要处理所有层中的验证错误。据我所知,通常有以下两种方法来处理错误:

1-引发异常

2-返回操作结果

在你看来,哪一个是最好的

1-引发异常

这是我的方法。如中所示,我使用了
ValidatorBehavior
来处理与验证命令相关的验证错误,如。用于验证输入命令,错误缓存在
ValidatorBehavior
中的
Handle
方法中

问题之一是
FluentValidation
在命令无效时抛出异常。此异常可以缓存在web API中

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

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

2-返回操作结果

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


您对这两种方法有何看法?我想知道你是否同意你的想法来做出最好的决定

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


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

这取决于业务任务、具体项目、背景,体系结构等。没有“经验法则”,但是在您选择了其中一个选项之后,最好坚持使用它,并以相同的方式处理所有错误。两者各有利弊。我个人更喜欢第二种方法