Corak Suntikan Ketergantungan yang Dipertingkatkan dalam Go
Dalam Go, pendekatan tradisional untuk komponen pendawaian adalah untuk membuat instantiat secara manual dan lulus kebergantungan dalam fungsi utama , seperti yang dilihat dalam kod yang diberikan. Walaupun kaedah ini berfungsi, ia boleh menjadi menyusahkan dan terdedah kepada ralat apabila pangkalan kod berkembang.
Untuk menangani isu ini, adalah wajar mempertimbangkan corak alternatif:
1. Parameter Fungsi
Lepasi kebergantungan sebagai parameter fungsi. Ini memudahkan ujian dengan membenarkan kebergantungan mudah dipermainkan.
func someConsumer(g Guy) { fmt.Println("Hello, " + g.SomeDumbGuy()) } func main() { var d datstr someConsumer(d) }
2. Fungsi Kilang
Buat fungsi kilang yang mengembalikan objek dengan kebergantungan yang telah disuntik. Ini memusatkan suntikan kebergantungan dan menjadikannya lebih mudah untuk mengkonfigurasi kebergantungan berdasarkan konteks tertentu.
func NewGuy() Guy { return &datstr{} } func someConsumer(g Guy) { fmt.Println("Hello, " + g.SomeDumbGuy()) } func main() { g := NewGuy() someConsumer(g) }
3. Middleware
Gunakan fungsi middleware untuk memintas permintaan dan menyuntik kebergantungan ke dalam konteks permintaan. Ini memberikan fleksibiliti dan membolehkan suntikan pergantungan dinamik.
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) }
Elak Perpustakaan DI
Tidak seperti bahasa lain, Go tidak memerlukan penggunaan suntikan pergantungan (DI ) perpustakaan. Malah, perpustakaan DI boleh memperkenalkan kerumitan dan abstraksi yang tidak perlu. Kesederhanaan dan pengurusan pergantungan yang jelas Go menggalakkan ketelusan dan kemudahan penyahpepijatan.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Meningkatkan Suntikan Ketergantungan dalam Go Beyond Instantiation Asas?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!