0

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 来获取此错误。我们的观点是:我们不知道在哪里存储最后的错误数据。在单身课上?

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

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

4

2 回答 2

1

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

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

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

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

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

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

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

我建议您使用 Microsft Enterprise 库。

MEL 6.0 中的异常处理

于 2013-08-24T12:43:13.470 回答
0

在这里,您可以查看一些异常抛出指南,以及一些需要考虑的性能问题。

一段时间以来,我一直在使用Elmah记录异常,我完全推荐它。

Elmah 的异常处理可以给你一个提示,告诉你如何使用它。

希望能帮助到你!

于 2015-02-17T09:54:19.150 回答