http://topic.csdn.net/t/20051202/00/4432545.html
上面的帖子我看了,但是还是没有答案,
如果你的项目不是什么三层或者多层的话(小项目),不管用什么方式处理都可以
但是在大型的开发中,各层都分了很细,所以怎么样使用错误和异常就很重要了例如:1
数据层:
public int Add()
{
   try
      {
         // 数据层的操作,添加数据到数据库中
      }
   catch(DbException ex)
     {
         //记录日志或者其他
          throw new DALException(ex);
     }
    catch(Exception ex)
     {
        //记录日志或者其他
          throw new DALException(ex);
     }
return 1;
}
业务层:对于业务层,方法的返回值很重要了,如果你用bool的话,又要返回错误的信息恐怕是无能为力了
如果你用int大于0表示成功否则失败,-5表示XX错误原因,这样岂不是要写一大堆的方法返回值,即-5表示什么等,
又要求程序员对方法很熟悉,至少要知道方法返回值个表示什么。
public int add()
{
    try
    {dal.add();
    }
   catch(DALException ex)
   {
     //处理一些bll的事情,当然返回的信息是对用户有效的,而不是数据库的一些技术信息
     throw new BLLException(ex)
   }
  return 1;
}
上面的例子就是数据库有异常的时候怎么处理的,我想了解下各位有什么好的方法,例子2
业务层
pubic int add(model)
{
   if(model.Age>130)
   {
     //一种逻辑错误,年龄不可能那么大,做时怎么处理呢,直接抛出异常吗,还是返回一个int类型的值,-6表示这个错误,或者返回一个对象
      //对象里有错误的原因和数字
}
return 1
}
对于上面2种情况我一直很疑惑,到底怎么处理才好,我目前是用返回对象的形式和int的形式做的,感觉很麻烦,跟ui联系太紧了
希望各位说说你们的经验和看法

解决方案 »

  1.   

    对于方法add(model) {}我认为下面的做法更合适:pubic void add(Model model) {
      if(model == null)
        throw new ArgumentNullExceltion("model");
      if(model.age > 130 || model.age<0)
        throw new ArgumentOutOfRangeException("model...");
      try {
        new TableAccess<Model>.Save(model);
      } catch(Exception ex) {
        throw ex;
      }
    }为什么使用void而非int?
    因为对于方法的调用者,只需要知道方法是否执行成功,而不需要被调用的方法告诉他往数据库里写了几行数据。
      

  2.   

    之前我都不是用异常来处理的,但现在我觉得用异常比较好,不过在ui就多了很多try和catch代码了
    然而用异常处理和用返回对象的区别是什么我还是搞不清楚比如bll的一个方法要个ui调用者一个信息,比如是用户存在不能插入重复记录
    如果方法是返回int的话
    就要这样
    if(result==-6){//用户存在不能插入重复记录
    }
    如果是异常的话try
    catch{XXexception}
    {}就是这样if和catch有什么区别,异常的话降低了性能
      

  3.   

    有人说一些bll的错误是可知的没有必要抛出异常,但是没有抛出异常那么你的错误信息是怎么传给调用方的
    用int或者对象吗比如:
    public int add(model)
    {
        if(model.Age<=0 || model.Age>130)
        {
      //这个错误是可知的,但是不抛出异常,那么要怎么样才能给调用方提示信息,表示这种错误呢
    }
        
    }