三层架构,在数据访问层抛出的异常要怎么在ui层显示呢

解决方案 »

  1.   

    在web层try catch就行了,最好catch相应的异常类型
      

  2.   

    void FunInUILayer()
    {
    try
    {
    //调用逻辑层函数
    FunctionInBussinizeLayer();
    }
    catch(MyException e)
    {//统一处理异常
    Response.Redirect("ErrPage?code=" + e.code);
    }
    }void FunctionInBussinizeLayer()
    {
    try
    {
    if(true != Something())
    {//这里抛出逻辑层异常
    throw new MyException(MyExpType.BussinizeException);
    }
    //调用数据层函数
    FunctionInDataLayer();
    }
    catch(MyException e)
    {
    if(e.code == someValue)
    {//逻辑层可能要将异常类型做一些转化
    throw new MyException(anotherCode);
    }
    else
    {//再向外抛出
    throw e;
    }
    }
    }void FunctionInDataLayer()
    {
    try
    {
    DoSomething();
    if(somethingWrong)
    {
    throw new MyException(MyExpType.DataException);
    }

    }
    catch(SystemException e) //例如OleDbException
    {
    throw new MyException(MyExpType.DataException);
    }
    }