如果某个业务功能复杂,多层循环判断嵌套是避免不了的,但可以通过函数提取来提高代码的可读性和可修改性,降低程序的复杂性。
原则:
l 嵌套不要超过3层
l 函数提取的时候,不要为了提取而提取,要把提取出来的函数从业务角度看,函数实现的是一个业务活动、一个业务步骤,或者是一个业务规则都可以。
例如:
不好例子:
For i = LBound(mystrCompTargetTypeID) To UBound(mystrCompTargetTypeID)
'查找合规性指标编号
mystrCompTargetNo = findCompTargetNo(mystrCompTargetTypeID(i))
For j = LBound(mystrCompTargetNo) To UBound(mystrCompTargetNo)
'初始化合规性指标
Call initCompTarget(strCompTargetNo, myCompTarget)
For mydtmAnalyseDate = dtmStartDate To dtmEndDate
For k = LBound(intAccountID) To UBound(intAccountID)
'根据合规性指标编号,计算合规性指标值
Set myTempColGotoutData = calCompTargetWithAccount(strCompTargetNo, intAccountID(k), mydtmAnalyseDate, myCompTarget)
For Each myGotoutData In myTempColGotoutData
colGotoutData.add myGotoutData
Next myGotoutData
Next k
Next mydtmAnalyseDate
Next j
Next i
重构后的例子:
For i = LBound(mystrCompTargetTypeID) To UBound(mystrCompTargetTypeID)
'查找合规性指标编号
mystrCompTargetNo = findCompTargetNo(mystrCompTargetTypeID(i))
For j = LBound(mystrCompTargetNo) To UBound(mystrCompTargetNo)
'计算一个合规性指标值
Call myCompTargetServ.calCompTarget(mystrCompTargetNo(j), mystrCompTargetTypeID(i), intAccountID, dtmStartDate, dtmEndDate, colGotoutData)
Next j
Next i