🗂

【Design Principle】Hollywood principle、program against abstraction

2023/10/21に公開

Design Principle

Hollywood principle

https://www.oreilly.com/library/view/learning-python-design/9781785888038/ch08s04.html

高レベルコンポーネントはいつ、どのようにな低レベルシステムを必要としているかを定義づける。
言い換えると、Don't call us, we'll call you. 「私たちを呼ぶな、私たちからあなたを呼ぶ」

//高レベルコンポーネント
type EventProcessor interface {
    //どのようなシステムを必要としてるか
    ProcessEvent(data string) string
}

// Framework はイベント処理のフレームワーク
type Framework struct {
    processor EventProcessor
}

func NewFramework(p EventProcessor) *Framework {
    return &Framework{processor: p}
}


func (f *Framework) TriggerEvent(data string) {
    //いつ必要としてるか(このタイミングで実行したい)
    result := f.processor.ProcessEvent(data)
    fmt.Println(result)
}


type UserCode struct{}

func (u *UserCode) ProcessEvent(data string) string {
    return "Processed: " + data
}

func main() {
    userCode := &UserCode{}
    framework := NewFramework(userCode)
    framework.TriggerEvent("test event")
}


program against abstraction

「抽象に対してプログラムする」=「実装ではなく、抽象に対してプログラムせよ」
オブジェクト指向では抽象はインターフェースもしくは抽象クラスとして表される。

Discussion