Menu
Coddy logo textTech

Inversione delle dipendenze

Lezione 26 di 28 del corso Codice pulito - Scrivi codice migliore con Python di Coddy.

"Dipendi dalle astrazioni, [non] dalle concretezze."

Vediamo un esempio che viola il principio,

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

La classe LocalStorage salva una coppia chiave-valore.

Ora abbiamo un'altra classe principale che usa LocalStorage,

class App:
	def start(self, key, value):
		storage = LocalStorage()
		storage.save(key, value)

LocalStorage è un'implementazione concreta e App dipende da essa!

La soluzione migliore sarebbe creare un'interfaccia (classe astratta),

from abc import ABC, abstractmethod


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

E poi usare un'istanza dell'interfaccia anziché l'implementazione concreta. 

challenge icon

Sfida

Facile

Ti viene fornito del codice quasi completo; aggiungi la classe astratta Storage.

Nota che dopo l’implementazione è facile passare a un’altra classe concreta, per esempio CloudStorage...

Provalo tu

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)

Tutte le lezioni di Codice pulito - Scrivi codice migliore con Python

Esercitati da solo: Compilatore Python online