我正在研究一个基于数据库数据的验证解决方案。 现在,代码中的结构由if-else语句覆盖,但我正在寻找一个更复杂的解决方案,因为预计结构会像现在这样更复杂。 复杂验证的最佳方法是什么? 只需将其划分为方法,一些验证类解决方案,或者您是否有一些更好的方法来处理类似的事情?
if (someCondition1) {
if (!someCondition2) {
if (!someCondition3) {
if (!someCondition4) {
doSomething();
} else {
doSomething2();
}
} else {
doSomething3();
}
} else {
doSomething4;
}
} else {
doSomething5;
}
你可以做很多事情
1-将这些条件调用拆分为更小的方法
2-尽可能使用switch语句
3-验证您的逻辑,看看是否所有的案例都是必需的,或者是否可以将它们分组
您发布的代码确实太嵌套了,而且将来很难调试,因此您可能希望至少将其分解成更小的,可理解的部分
至少,您可以通过重新排序和翻转某些条件来使嵌套变得平坦:
if (!someCondition1) {
doSomething5()
} else if (someCondition2) {
doSomething4()
} else if (someCondition3) {
doSomething3()
} else if (someCondition4) {
doSomething2()
} else {
doSomething()
}
这种转换之所以有效,是因为条件空间可以像那样被分割成大块; 如果遇到if
and和else
分支都必须检查进一步的条件的情况,则这是不可能的。
然后可以将其重铸为Kotlin:
when {
!someCondition1 -> doSomething5()
someCondition2 -> doSomething4()
someCondition3 -> doSomething3()
someCondition4 -> doSomething2()
else -> doSomething()
}
这与您的原始代码完全相同,但以一种更简洁的方式。
当然,还有很多更激烈和更高级别的重构可以做,但我认为没有一个明显的答案,因为这可能取决于条件的性质和数量,以及它们在将来如何改变。