doc.dev1x.org

依存関係逆転の原則

1. 原則

2. 根拠

3. 指針

layer1.py
layer2.py
# layer1.py
import layer2

class Program:
    def exec():
        logic = layer2.Logic()
        return logic.execute()
# layer2.py
class Logic:
    def execute():
        return 'Layer2 Execute.'
# layer1.py
class Logic(metaclass=ABCMeta):
    @abstractmethod
    def execute():
        pass

class Program:
    def __init__(self, logic):
        self.logic = logic      # <-- logic引数はLogicクラスのインスタンス

    def exec():
        return self.logic.execute()
# layer2.py
import layer1

class Logic(layer1.Logic):
    def execute():
        return 'Layer2 Execute.'

4. 注意事項

コードの複雑度は上昇する

関連

参考資料