C# 分层应用程序中的异常处理
如果我有一个分层的应用程序,并且我的数据层可能会遇到一个OptimisticConcurrencyException调用层或较低层应该如何处理这个问题 调用层不知道什么是OptimisticConcurrencyException,所以我应该实现一个自定义异常并捕获OptimisticConcurrencyException并抛出自定义异常吗C# 分层应用程序中的异常处理,c#,.net,exception,exception-handling,C#,.net,Exception,Exception Handling,如果我有一个分层的应用程序,并且我的数据层可能会遇到一个OptimisticConcurrencyException调用层或较低层应该如何处理这个问题 调用层不知道什么是OptimisticConcurrencyException,所以我应该实现一个自定义异常并捕获OptimisticConcurrencyException并抛出自定义异常吗 如果您能提供一些指导,我们将不胜感激。您需要从调用层的角度来看待这一点。该层已要求数据层执行作业。如果您的数据层可以处理OptimisticConcurr
如果您能提供一些指导,我们将不胜感激。您需要从调用层的角度来看待这一点。该层已要求数据层执行作业。如果您的数据层可以处理
OptimisticConcurrencyException
,并遵守合同,那么请务必抓住它,然后继续并完成作业
但是,如果这对要求您执行的作业来说是致命的,并且如果调用方不期望它,或者不知道它,那么您可以创建自己的异常类,捕获与调用层无关的异常,然后抛出它。这是调用层可以了解的,并且可以作为使用此函数/API的副作用进行详细记录。
OptimisticConcurrencyException
是属于数据层的异常,因此应该包含在其中。调用层不太可能处理它
我将创建一个更通用的异常,例如DataSourceException
,它将包含一些上下文,例如哪个函数失败(以及哪些参数失败)以及为什么失败。我还将原始异常包含为内部异常
阅读我关于捕获异常的博客文章:
我还写了一些关于异常处理的其他条目,单击异常标记
更新
我将创建以下项目:
- Web我的UI是MVVM,我想让我的ViewModel通知用户记录是由另一个用户更新的,并相应地执行一些导航,但是我捕获的异常类型是什么?在该层中,它只能将异常标识为System.exception。在这种情况下,创建一个异常,指示记录已更改。例如,
或类似的东西。遵循此处的分离接口模式:减少层之间的耦合。@jgauffin,再次感谢您的回复。您是否建议我实现例如EntityChangedByotheException(它将从System.Exception继承)在将抛出它并在另一个程序集中为其定义接口的程序集/层中,例如,IEntityChangedByoTheException,我的VM将使用它?通过这种方式,您可以轻松更改实现,而不会影响其他代码。例如,您从使用实体库开始,但发现它有多陈旧并切换到nhibernate。EntityChangedByOtherException