Go 中增強的依賴注入模式
在Go 中,連接組件的傳統方法是在main 函數中手動實例化並傳遞依賴項,如給定程式碼所示。雖然此方法很實用,但隨著程式碼庫的成長,它可能會變得麻煩且容易出錯。
要解決這個問題,值得考慮替代模式:
1。函數參數
將相依性作為函數參數傳遞。這透過允許輕鬆模擬依賴關係來簡化測試。
func someConsumer(g Guy) { fmt.Println("Hello, " + g.SomeDumbGuy()) } func main() { var d datstr someConsumer(d) }
2.工廠函數
建立傳回已註入依賴項的物件的工廠函數。這集中了依賴項注入,並且可以更輕鬆地根據特定上下文配置依賴項。
func NewGuy() Guy { return &datstr{} } func someConsumer(g Guy) { fmt.Println("Hello, " + g.SomeDumbGuy()) } func main() { g := NewGuy() someConsumer(g) }
3.中間件
使用中間件函數攔截請求並將依賴項注入到請求上下文中。這提供了靈活性並允許動態依賴注入。
func wrapWithGuy(handler http.Handler) http.Handler { return func(w http.ResponseWriter, r *http.Request) { g := NewGuy() r.Context() = context.WithValue(r.Context(), "guy", g) handler.ServeHTTP(w, r) } } func main() { handler := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { g := r.Context().Value("guy").(Guy) fmt.Fprintf(w, "Hello, %s!", g.SomeDumbGuy()) }) http.Handle("/", wrapWithGuy(handler)) http.ListenAndServe(":8080", nil) }
避免 DI 庫
與其他語言不同,Go 不需要使用依賴注入(DI ) 圖書館。事實上,DI 庫可能會引入不必要的複雜性和抽象。 Go 的簡單性和明確依賴管理提高了透明度和調試的簡易性。
以上是如何超越基本實例化來改善依賴注入?的詳細內容。更多資訊請關注PHP中文網其他相關文章!