Inversion des dépendances
Leçon 26 sur 28 du cours Clean Code - Écrire un meilleur code avec Python de Coddy.
« Dépendez des abstractions, [et non] des concrétions. »
Montrons un exemple qui enfreint ce principe,
class LocalStorage:
def save(self, key, value):
print("Saved, " + key + ":" + value)La LocalStorage class enregistre une paire composée d’une clé et d’une valeur.
Nous avons maintenant une autre classe principale qui utilise LocalStorage,
class App:
def start(self, key, value):
storage = LocalStorage()
storage.save(key, value)LocalStorage est une implémentation concrète et App en dépend !
La meilleure façon serait de créer une interface (class abstraite),
from abc import ABC, abstractmethod
class Storage(ABC):
@abstractmethod
def save(self):
passPuis d’utiliser une instance de l’interface au lieu de l’implémentation concrète.
Défi
FacileOn vous donne un code qui est presque terminé, ajoutez la classe abstraite Storage.
Notez qu’après l’implémentation, il est facile de passer à une autre classe concrète, par exemple CloudStorage...
Essayez vous-même
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)
Toutes les leçons de Clean Code - Écrire un meilleur code avec Python
Entraînez-vous par vous-même : Compilateur Python en ligne