🗂
【Design Principle】Hollywood principle、program against abstraction
Design Principle
Hollywood principle
高レベルコンポーネントはいつ、どのようにな低レベルシステムを必要としているかを定義づける。
言い換えると、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