我想要一个验证对象的函数。
如果出现错误结果,我想知道我的对象无效的原因。
这是一个示例算法:
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;
}
}
你怎么看?你有其他想法吗?
答案 0 :(得分:0)
Rails方式:
有一个方法save
保存到数据库中,并且在验证错误的情况下,只需保留它们而不会引发异常。
提供一个getter validation_errors
,它会返回上一个save
中的错误列表。
制作一个简单的方法save_with_validation
,首先调用save
然后引发异常,当且仅当validation_errors
返回非空的错误集时。 (根据您的语言,您可以使用较短的名称,例如save!
)