我今天遇到了類似這樣的代碼;具有對整個班級可見的流量控制標誌。我的直覺告訴我們,這是處理流量控制需求的錯誤方法(它幾乎就像C中的舊時代的全球旗幟)。全局變量仍然不好?
(這個例子是在VB.Net,但類似的事情可能在C#來完成。)
Public Class myClass
Private bMyFlag As Boolean ''// <------
private sub New
bMyFlag = false
end sub
private sub mySub1
bMyFlag = true
mySub3()
mySub4()
mySubN()
end sub
private sub mySub2
bMyFlag = false
mySub3()
mySub4()
mySubN()
end sub
private sub mySub3
if bMyFlag then
DoSomething()
else
DoSomethingElse()
end if
end sub
private sub mySub4
if not bMyFlag then
DoSomethingDifferent()
else
DoSomethingReallyDifferent()
end if
end sub
private sub mySubN
if not bMyFlag then
DoNotPassGo()
else
DoNotCollect200Dollars()
end if
end sub
end class
很明顯,我認爲這是事實後嫁接。我打算重新編寫代碼,以便bMyFlag是傳遞給mySub3,mySub4和mySuvN的參數。但是,在我這樣做之前:
是否有一個有效的理由讓流控制標誌對類是全局的?
如果不是,爲什麼這被認爲是不好的做法?
我不打算髮佈一個完整的答案,但你應該瞭解得墨忒耳定律:HTTP:// EN .wikipedia.org/wiki/Law_of_Demeter – 2009-09-01 21:09:47