gpt4 book ai didi

c# - N-Layer/N-Tier 错误处理设计

转载 作者:行者123 更新时间:2023-12-03 08:32:55 28 4
gpt4 key购买 nike

Out 团队正在构建一个 N-Tier 应用程序,它将处理大量的数据库和网络方法。

基本上我们设计了以下层(从下到上):

数据层:可以是 Oracle 或 SQL(基本上是使用 Database First 自动生成的 EF 实体和上下文)
持久层:处理数据层。我们有一个用于 Oracle 的持久层和另一个用于 SQL 的层,它们之间有一些小的变化(我们希望将来重构它以拥有一个单一的代码 - 接受想法)。
业务层:这是处理特定的应用程序逻辑。

在此之上,我们可以有一个表示层(ASP.NET App)、一个直接调用业务功能的 API、一个允许来自网络的业务请求的网络代理等。

我们对错误处理机制存有疑问。我们决定所有异常都在业务层受到威胁,所以这是我有 try/catch 语句的唯一地方。

我们的观点是我们不希望应用程序用户摆脱异常,但他们需要知道操作的状态。我们创建了一个 ReturnStatus 类,如下所示:

public class ReturnStatus
{
public enum ReturnStatusTypes : int { Success, Failure, Unknown }

public ReturnStatusTypes Status;
public int MessageCode;
public string Message;

/// <summary>
/// Class constructor
/// </summary>
public ReturnStatus()
{
Status = ReturnStatusTypes.Unknown;
MessageCode = 0;
Message = "";
}

/// <summary>
/// Class constructor
/// </summary>
/// <param name="status">Status</param>
/// <param name="message">Message</param>
public ReturnStatus(ReturnStatusTypes status, int msgCode)
{
Status = status;
MessageCode = msgCode;
Message = ErrorMessages.ResourceManager.GetString("ErrorCode" + msgCode);
}
}

Message 属性可根据之前设置的 App 文化进行本地化。

我们希望对业务层方法的每个调用都有一个 ReturnStatus。这可以登录到 ASP.NET 状态栏,返回到 API 或通过网络发送到其他应用程序。问题是我们的大多数业务类都返回数据,因此我们需要找到一种方法将状态和数据一起返回给消费参与者。

我们的员工正在考虑:
a) 在每次调用时使用元组。这似乎不是推荐的方式。
b) 抛出一个期望:不符合我们的架构。
c) 在每次调用时使用 ReturnStatus:被认为是一种选择,即使看起来很老式。
d) 在某处保存最后一个错误对象,以便调用可以直接返回数据,用户可以调用 lastactionstatus 来获取此错误。我们的观点是:我们不知道在哪里存储最后的错误数据。在单例课上?

解决方案必须在所有业务方法之间保持一致。

您会推荐什么最佳方法以及如何实现它。

最佳答案

你做错了什么,但看看这个信息我从微软企业图书馆得到

使用异常处理程序
异常处理应用程序 block 旨在支持应用程序组件中的 catch 语句中包含的典型代码。应用程序 block 允许开发人员将此逻辑封装为可重用的异常处理程序,而不是在应用程序组件中的相同 catch block 中重复此代码(例如记录异常信息)。异常处理程序是封装异常处理逻辑并实现名为 IExceptionHandler 的异常处理应用程序 block 接口(interface)的 .NET 类。异常处理应用程序 block 包括四个异常处理程序:

包装处理程序。 此异常处理程序将一个异常包装在另一个异常周围。

更换处理程序。 此异常处理程序将一个异常替换为另一个异常。

日志处理程序。 此异常处理程序格式化异常信息,例如消息和堆栈跟踪。然后日志记录处理程序将此信息提供给企业库日志记录应用程序 block ,以便可以发布它。

故障契约(Contract)异常处理程序。此异常处理程序设计用于 Windows Communication Foundation (WCF) 服务边界,并从异常生成新的故障协定。

非常重要的是,如果您有另一个进程,例如从设备读取并在主线程(UI)中定位错误消息,主线程也必须捕获所有异常。

我建议您使用 Microsft Enterprise 库。

Exception Handling in MEL 6.0

关于c# - N-Layer/N-Tier 错误处理设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18418596/

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