我想要一个验证对象的函数。
如果结果为错误,我想知道我的对象无效的原因。
这是一个示例算法:
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!
)