我不確定如何搜索這個,所以如果它已被回答,請將我指向它。有幾種部分重疊的邏輯流使用DRY的最佳做法嗎?
我再次遇到了一個相當普遍的情況,我不確定最佳做法。考慮一個函數具有三種可能值之一的情況;我們會說他們是'a','b'和'c'。
如果我收到'a'或'b',那麼在處理了一些特定的案例後,我會進行大量重疊處理。但是,如果我收到'c',我需要做一些完全不同的事情。舉例來說,這是微不足道的,但是我有一些非常重要的實例。
示例(Python):
def doStuff(self, val):
if val == 'a':
self.counter += 1
print val, "is very good"
self.passing = True
self.doMoreStuff()
elif val == 'b':
self.counter += 2
print val, "is not too bad"
self.passing = True
self.doMoreStuff()
elif val == 'c':
self.counter -= 1
self.passing = False
print val, "is unacceptable"
self.weAreDoneHere()
這樣的想法是,對於任一「一」或「B」,有一些具體的情況下的指令和一些重複的東西,不過「C」,它是全部不同。在某些情況下,留下三個不同的病例並不算太壞,儘管它讓我的DRY眼睛抽搐着看着它。在其他情況下,如果有很多重複的代碼,它可能是一個更大的問題。
一個解決方案是類似以下內容:
def doStuff(self, val):
if val == 'a' or val == 'b':
if val == 'a':
self.counter += 1
print val, "is very good"
elif val == 'b':
self.counter += 2
print val, "is not too bad"
self.passing = True
self.doMoreStuff()
elif val == 'c':
self.counter -= 1
self.passing = False
print val, "is unacceptable"
self.weAreDoneHere()
這是雙重檢查最值的方法好嗎?它也使我的DRY眼睛抽搐一點,但不像重複巨大的代碼塊。
我真正的問題,我想是有沒有討論過這個問題,或者是否有標準的「最佳實踐」方式來做到這一點?
我不知道python,但是在大多數情況下,你會重構A和B之間的所有東西,並將它們放在一個私有函數中,然後從A和B調用它。 – jbabey 2013-04-05 18:47:51
python不太重要,它是一個相當隨意的選擇。如果通用代碼不足以保證額外的方法,只有3或4行? – 2013-04-05 18:55:32
我想大多數人會爭辯說,即使是一條共同的路線也足以保證新的**私人**功能。 – jbabey 2013-04-05 19:22:46