Menu
Coddy logo textTech

Inversão de dependência

Lição 26 de 28 do curso Clean Code - Escreva códigos melhores com Python da Coddy.

"Dependa de abstrações, [não] de concreções."

Vamos mostrar um exemplo que viola o princípio,

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

A classe LocalStorage salva o par de chave e valor.

Agora temos outra classe principal que usa o LocalStorage,

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

LocalStorage é uma implementação concreta e App depende dela!

A melhor maneira seria criar uma interface (classe abstrata),

from abc import ABC, abstractmethod


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

E então usar uma instância da interface em vez da implementação concreta. 

challenge icon

Desafio

Fácil

Você recebeu um código que está quase pronto, adicione a classe abstrata Storage.

Observe que após a implementação é fácil mudar para outra classe concreta, por exemplo CloudStorage...

Experimente você mesmo

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 as lições de Clean Code - Escreva códigos melhores com Python