C# Onion体系结构中引发异常与返回操作结果对象
我有一个由洋葱架构实现的项目,它类似于。我需要处理所有层中的验证错误。据我所知,通常有以下两种方法来处理错误: 1-引发异常 2-返回操作结果 在你看来,哪一个是最好的 1-引发异常 这是我的方法。如中所示,我使用了C# Onion体系结构中引发异常与返回操作结果对象,c#,error-handling,architecture,onion-architecture,C#,Error Handling,Architecture,Onion Architecture,我有一个由洋葱架构实现的项目,它类似于。我需要处理所有层中的验证错误。据我所知,通常有以下两种方法来处理错误: 1-引发异常 2-返回操作结果 在你看来,哪一个是最好的 1-引发异常 这是我的方法。如中所示,我使用了ValidatorBehavior来处理与验证命令相关的验证错误,如。用于验证输入命令,错误缓存在ValidatorBehavior中的Handle方法中 问题之一是FluentValidation在命令无效时抛出异常。此异常可以缓存在web API中 有人说异常是针对意外情况的,但
ValidatorBehavior
来处理与验证命令相关的验证错误,如。用于验证输入命令,错误缓存在ValidatorBehavior
中的Handle
方法中
问题之一是FluentValidation
在命令无效时抛出异常。此异常可以缓存在web API中
有人说异常是针对意外情况的,但在这个场景(验证)中,我们知道验证阶段的结果,并通过抛出异常实现了一些业务规则
另一个是在域层
中使用抛出异常。所以毫无疑问,我们需要在其他层中抛出异常
2-返回操作结果
在我的一些朋友建议的第二种方法中,我们可以使用handleerrors通过名为OperationResult
的对象向最终用户显示这些错误。从性能的角度来看,这似乎更好,因为抛出异常比第一种方法更昂贵
您对这两种方法有何看法?我想知道你是否同意你的想法来做出最好的决定 对于异常错误,我通常从所有层中抛出异常,这些异常在全局异常处理程序中处理。这允许我的应用程序和域代码保持“干净”,我的意思是,它可以专注于正常的流,而不是处理异常。毕竟,异常是异常的,不是正常流程的一部分,所以对我来说,它们不应该破坏你的“正常”逻辑
至于你的绩效评价,我认为这并不重要,因为你在这里谈论的是微观优化,所以基本上,这不是一个真正的问题。这取决于业务任务、具体项目、背景,体系结构等。没有“经验法则”,但是在您选择了其中一个选项之后,最好坚持使用它,并以相同的方式处理所有错误。两者各有利弊。我个人更喜欢第二种方法