返回布尔值结果并在错误返回时显示错误的函数



我想要一个验证对象的函数。

如果结果为错误,我想知道我的对象无效的原因。

这是一个示例算法:

public bool ValidObject(MyObjectClass obj)
{
   if(obj==null)
   {
       throw Exception("obj cannot be null");
       return false;
   }
   if(obj.A=='x'){
       throw Exception("obj cannot be x");
       return false;
   }
    ....
    ....
    // other validations
    ....
    ...
   if(obj.Students.Count()==100)
   {
       throw Exception("some error message");
       return false;
   }
   return true;
}

如果我调用我的函数:

if(ValidateObject(this.Obj))
{
   InsertIntoDB(this.Obj);
}
else
{
   //do something 
}

如果我的对象无效,我将收到错误。但我不想要这个。

但也许在某些情况下,我想知道我的对象无效的原因。

我不想做同样的事情,但其中一个会引发异常。我认为这不是一个正确的方法。

因此,我的第一个想法是将以前的函数设为私有并创建另一个公共函数:

public bool ValidObject2(MyObjectClass obj, bool withErrors=false)
{
  try
  {
     return ValidObject(obj);
  }
  catch(Exception ex)
  {
    if(withErrors)
    {
       throw ex;
    }
    return false;
  }
}

你觉得怎么样?你还有其他想法吗?

The Rails way:

有一个保存到数据库的方法save,并且在出现验证错误的情况下,只需保留它们而不会引发异常。

提供一个 getter validation_errors,该返回上一个save中的错误列表。

创建一个简单的方法save_with_validation该方法首先调用save,然后当且仅当validation_errors返回一组非空错误时引发异常。(根据您的语言,您也许可以使用较短的名称,例如save!

最新更新