帮助处理异常

时间:2010-07-02 09:55:18

标签: c# asp.net exception-handling

我有这个应用程序结构: 1.表示层调用 2.业务逻辑层反过来调用 3.数据访问层来处理数据库。

现在我有一个联系人页面,我可以在其中添加新联系人到数据库。

因此,要添加新联系人,请填写所有必需的详细信息,然后从页面调用添加方法(驻留在BLL中),然后调用驻留在DAL中的添加方法。

DAL中的此方法返回记录的当前标识,然后返回BLL方法并最终在页面上传递。

这很好。但是,如果得到一个异常,我如何正确处理它,因为DAL中的方法有一个int的返回类型,我不想再抛出一个错误!因为其他明智的我将不得不在几乎所有的方法中写try catch。

//something like this
public int AddMethod(ContactClass contactObj)
{
    int result = 0;

    try
    {
        result = ExecuteSomeSP("SPName", SP_Parameters);
    }
    catch(SQLException se)
    {
        throw new SQLException
    }

    return result;
}

而是我希望向用户显示一个用户友好的消息,他们可以很容易地理解这些消息,并且我将向自己发送一封邮件,记录刚刚发生的错误。

另外请告诉我如何实现自定义异常类。

请告诉我该怎么做!!

谢谢。

2 个答案:

答案 0 :(得分:3)

在每种方法中都不需要try / catch。但是你通常需要在每个 Layer 中使用try / catch(对于某个动作)。

这是正确的,每一层都必须处理自己破碎的合同,清理等。

从“异常”到“友好消息”的转换适用于GUI,而不是下层。

当你捕获并重新抛出异常时,请确保没有丢失信息,在InnerException属性中转发它:

try
{
   // DAL
}
catch (DALException de)
{
   // Log, ....

   throw new BLLException(message, de);
}

答案 1 :(得分:1)

不要尝试捕获每个方法或层,只有它是合理的。尝试捕获应该永远不会像有条件的那样。表示层永远不应该有逻辑。

由于你使用DAL接口,我会创建一个自定义的DalException并将其抛出SQLException

public int addMethod(ContactClass contactObj) throws DalException {
    try {
        return ExecuteSomeSP("SPName", SP_Parameters);
    }
    catch(SQLException e) {
        throw new DalException(e);
    }
}

在您的业务逻辑层中捕获异常并使用表示层生成弹出窗口

public void addMethod(ContactClass contactObj) {
    try {
        dal.addMethod(contactObj);
    }
    catch(DalException e) {
        // notify user
        view.alert(e.getMessage());
    }
}