Menu
Coddy logo textTech

Dependency inversion

Lección 26 de 28 del curso Clean Code - Write better code using Python de Coddy.

"Depende de las abstracciones, [no de] las concreciones."

Veamos un ejemplo que viola el principio:

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

La clase LocalStorage guarda un par de clave y valor.

Ahora tenemos otra clase principal que usa LocalStorage:

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

LocalStorage es una implementación concreta y App depende de ella.

La mejor manera sería crear una interfaz (clase abstracta):

from abc import ABC, abstractmethod


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

Y después usar una instancia de la interfaz en lugar de la implementación concreta. 

challenge icon

Desafío

Fácil

Se te proporciona un código que está casi terminado; añade la clase abstracta Storage.

Observa que, después de la implementación, es fácil cambiar a otra clase concreta, por ejemplo CloudStorage...

Pruébalo tú mismo

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)

Todas las lecciones de Clean Code - Write better code using Python

Practica por tu cuenta: Compilador de Python online