Menu
Coddy logo textTech

依存性逆転

Coddyの「Clean Code - Pythonでより良いコードを書く」コースのレッスン 26/28。

「具象ではなく、抽象に依存せよ。」

この原則に違反する例を見てみましょう。

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

LocalStorageクラスは、キーと値のペアを保存します。

次に、LocalStorageを使用する別のメインクラスがあります。

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

LocalStorage具象的な実装であり、Appはそれに依存しています!

より良い方法は、インターフェース(抽象クラス)を作成することです。

from abc import ABC, abstractmethod


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

そして、具象的な実装の代わりにインターフェースのインスタンスを使用します。 

challenge icon

チャレンジ

簡単

ほとんど完成しているコードが提供されています。抽象クラス Storage を追加してください。

実装後は、例えば CloudStorage のような他の具象クラスに簡単に変更できることに注目してください...

自分で試してみよう

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)

Clean Code - Pythonでより良いコードを書くのすべてのレッスン