我有一个Query
类,它包含多个其他对象的集合属性。作为验证Query
对象的一部分,我想验证查询集合中的所有对象。到目前为止,我已经想出了三种方法来实现这一点。我希望得到人们更喜欢哪种方式以及可能的其他方法的反馈。
方法1
public static ValidationResult ValidateQuery(Query query)
{
ValidationResult result;
result = ValidateColumns(query);
if (result.Passed)
{
result = ValidateFilters(query);
if (result.Passed)
{
result = ValidateSortOrders(query);
}
}
return result;
}
尽管收集属性的数量很少,但代码可读性很高。但是如果我有更多的收集属性,我将最终得到许多嵌套的if语句,这会降低代码的可读性。我尝试在我的下两个方法中解决这个问题:
方法2
public static ValidationResult ValidateQuery(Query query)
{
ValidationResult[] results = new ValidationResult[4];
results[0] = ValidateColumns(query);
results[1] = ValidateFilters(query);
results[2] = ValidateGroups(query);
results[3] = ValidateSortOrders(query);
return results.FirstOrDefault(item => !item.Passed) ?? results[0];
}
方法三
public static ValidationResult ValidateQuery(Query query)
{
ValidationResult result = null;
int i = 0;
bool done = false;
do
{
switch (i)
{
case 0: result = ValidateColumns(query); break;
case 1: result = ValidateGroups(query); break;
case 2: result = ValidateSortOrders(query); break;
default: done = true; break;
}
++i;
} while (result.Passed && !done);
return result ?? new ValidationResult(true, string.Empty);
}
如果您需要,这里是ValidationResult
类的定义:
public class ValidationResult
{
public ValidationResult(bool passed, string message)
{
this.Passed = passed;
this.ErrorMessage = message ?? string.Empty;
}
public string ErrorMessage {get; private set; }
public bool Passed { get; private set; }
}