Inversão de dependência
Lição 26 de 28 do curso Clean Code - Escreva códigos melhores com Python da Coddy.
"Dependa de abstrações, [não] de concreções."
Vamos mostrar um exemplo que viola o princípio,
class LocalStorage:
def save(self, key, value):
print("Saved, " + key + ":" + value)A classe LocalStorage salva o par de chave e valor.
Agora temos outra classe principal que usa o LocalStorage,
class App:
def start(self, key, value):
storage = LocalStorage()
storage.save(key, value)LocalStorage é uma implementação concreta e App depende dela!
A melhor maneira seria criar uma interface (classe abstrata),
from abc import ABC, abstractmethod
class Storage(ABC):
@abstractmethod
def save(self):
passE então usar uma instância da interface em vez da implementação concreta.
Desafio
FácilVocê recebeu um código que está quase pronto, adicione a classe abstrata Storage.
Observe que após a implementação é fácil mudar para outra classe concreta, por exemplo CloudStorage...
Experimente você mesmo
from abc import ABC, abstractmethod
# your code here
class LocalStorage(Storage):
def save(self, key, value):
print("Saved, " + key + ":" + value)
class App:
def __init__(self, storage):
self.storage = storage
def start(self, key, value):
storage.save(key, value)
if __name__ == "__main__":
storage = LocalStorage()
app = App(storage)
key = input()
value = input()
app.start(key, value)