我有一堆验证代码遵循以下模式:
bool IsBroken()
{
var isBroken = Check(..., "error-1")
| Check(..., "error-2")
...
| Check(..., "error-n");
if (...)
{
isBroken |= Check(..., "error-1")
| Check(..., "error-2")
...
| Check(..., "error-n");
}
else
{
isBroken |= Check(..., "error-1")
| Check(..., "error-2")
...
| Check(..., "error-n");
}
// ...
// Could have more if-else or even nested if-else
return isBroken;
}
bool Check(bool condition, string message)
{
if (condition)
{
errors.Add(message);
}
return condition;
}
目标是执行所有检查,而不管结果如何。然而,这段代码的问题是它不支持分支覆盖。
一个简单的解决办法就是回复 Check(bool, string)
很明显,这会产生另一个较小的问题,即代码混乱。我正试图找出一个解决方案,可以给我最好的两个世界。有什么主意吗?!
2条答案
按热度按时间u4dcyp6a1#
如果重复验证(if检查)太多且时间很短,则可以创建需要执行的检查字典。将此字典传递给方法,迭代字典中的项,并在发生验证错误时添加错误消息。
示例代码:
pexxcrt22#
想出了一个好的解决方案:
而这也可以写成
if (condition) Append("error")
. 在我们的例子中,块语句必须写成: