Menu
Coddy logo textTech

Inversion des dépendances

Leçon 26 sur 28 du cours Clean Code - Écrire un meilleur code avec Python de Coddy.

« Dépendre des abstractions, [pas] des concrétions. »

Montrons un exemple qui viole ce principe,

class LocalStorage:
	def save(self, key, value):
		print("Saved, " + key + ":" + value)

La classe LocalStorage enregistre une paire clé et valeur.

Maintenant, nous avons 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 (classe abstraite),

from abc import ABC, abstractmethod


class Storage(ABC):
	@abstractmethod
	def save(self):
		pass

Et ensuite, utiliser une instance de l'interface au lieu de l'implémentation concrète. 

challenge icon

Défi

Facile

On 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