依存性逆転
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そして、具象実装の代わりにインターフェースのインスタンスを使用します。
チャレンジ
簡単ほぼ完成しているコードが与えられているので、抽象クラス 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オンラインコンパイラ