Immagina di avere questo codice:
class Foo:
def __init__(self, active):
self.active = active
def doAction(self):
if not self.active:
return
# do something
f=Foo(false)
f.doAction() # does nothing
Questo è un bel codice; In realtà ho (non in Python) una variabile attiva globale chiamata "dosomething" e una routine chiamata "qualcosa", dove la prima cosa che accade all'interno della routine "qualcosa" è if not dosomething return
.
Un'implementazione alternativa chiamerebbe una routine che esegue sempre un'azione, e il flag è controllato al momento dell'invocazione, come nel seguente codice:
class Foo:
def doAction(self):
# do something
doaction = False
f=Foo()
if doaction:
f.doAction()
Qual è la tua opinione su questo? Personalmente, trovo che la prima soluzione viola il principio meno sorprendente: il chiamante sta invocando un'azione che non viene mai eseguita in risposta a uno stato che è stato impostato da qualche altra parte, ma dal codice sembra che l'azione venga eseguita.
Lo considereresti un modello totale, un antipattern totale o solo un'opzione senza una strong opinione a favore o contro di essa?