Menu
Coddy logo textTech

依存性逆転

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

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

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

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

LocalStorage class は key と value のペアを保存します。

ここで、LocalStorage を使用する別のメイン class があります。

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

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

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

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でより良いコードを書くのすべてのレッスン

自分で練習してみよう: Pythonオンラインコンパイラ