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é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):
		pass

Puis d’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

Entraînez-vous par vous-même : Compilateur Python en ligne