我有一个方法,由于一些不直观的业务需求,需要大量评论。我不得不对其进行重构以使其不那么简洁(defactor?),但是当我说我评论过以下方法的地方对于确保业务需求不会意外更改时,请相信我:
public bool CheckBasedOnApplicableConditions()
{
bool conditionOne;
bool conditionTwo;
// Comments to explain why BusinessLogic is used
if (BusinessLogic())
{
//Comments discussing SecondaryBusinessLogic
conditionOne = true;
conditionTwo = SecondaryBusinessLogic();
}
else
{
//Comments discussing this scenario
conditionOne = DifferentBusinessLogic();
conditionTwo = !conditionOne;
}
//Comments about the CheckForCondition calls
if (conditionOne && CheckForConditionOne())
{
return true;
}
if (conditionTwo && CheckForConditionTwo())
{
return true;
}
return false;
}
我真的很想在未来证明这种方法不会被开发人员破坏(又名我在一个月内)。我觉得强调业务需求包括必须检查两个条件中的至少一个是很重要的。所以我在最终返回之前添加了以下代码:
//ReSharper normally points out this always evaluates to false,
// but because an exception is being thrown it does not complain.
if (!conditionOne && !conditionTwo)
{
throw new InvalidOperationException
("Condition One or Two must be applicable!");
}
预期的效果是,如果开发人员不小心违反了业务需求,则会抛出异常,而不是默默地返回 false 并创建一个需要时间跟踪的错误。这不是我以前真正见过的模式,但是 ReSharper 在添加 throw 时自动抑制了它自己的“代码在启发式上无法访问”的警告。
我的问题是:这种方法是否有意想不到的副作用?即,性能损失,或我看不到的可维护性问题,或其他意外?我知道我可以重新考虑该方法以使其更稳定;但我担心这会以理解为代价。