我的代码看起来像这样。一个' if else'每个链包含一长串条件列表,该条件列表应该何时调用该函数。
if (conditionA1() || conditionA2() && conditionA3() || ... && conditionAN()) {
functionA();
}
else if (conditionB1() || conditionB2() && conditionB3() || ... && conditionBN() {
functionB();
}
...
else if (conditionZ1() || conditionZ2() && conditionZ3() || ... && conditionZN()) {
functionZ();
}
它看起来像混乱的代码,可能难以维护,并想知道是否有一个好的设计模式来重构这个。
答案 0 :(得分:0)
如果条件都不同,那么嵌套是不可能的......但是,我发现有时更具可读性的是我将每个条件(或每两个条件)放在一个单独的行上,例如:
select temp.content,MAX(temp.AvgContent)
FROM
(
select ContentType AS content, AVG(Result) as AvgContent
from dopractice
where StudentId = @S_Id
group by ContentType order by ContentType desc
) AS temp
group by temp.ContentType;
这看起来很有趣,但通常如果我用实际条件做它看起来更好:)
答案 1 :(得分:0)
我知道处理长条件条件的两个好方法。
首先是创建命名变量来描述组合条件。
firstCompoundCondition = conditionA1() || conditionA2() && conditionA3() || ... && conditionAN();
secondCompoundCondition = conditionB1() || conditionB2() && conditionB3() || ... && conditionBN();
...
nthCompoundCondition = conditionZ1() || conditionZ2() && conditionZ3() || ... && conditionZN();
if (firstCompoundCondition) {
functionA();
}
else if (secondCompoundCondition) {
functionB();
}
...
else if (nthCompoundCondition) {
functionZ();
}
第二个 - 这是一种微妙的,也许最终更强大 - 是通过构造你的代码返回来消除对所有else
的需要,理想情况下返回内部函数的结果,但只是在区块内返回也可以。这可能意味着提取一个看起来不那么多的功能,但是当说完所有功能时它会更清洁。
firstCompoundCondition = conditionA1() || conditionA2() && conditionA3() || ... && conditionAN();
secondCompoundCondition = conditionB1() || conditionB2() && conditionB3() || ... && conditionBN();
...
nthCompoundCondition = conditionZ1() || conditionZ2() && conditionZ3() || ... && conditionZN();
if (firstCompoundCondition) return functionA();
if (secondCompoundCondition) return functionB();
...
if (nthCompoundCondition) return functionZ();