Modèles d'injection de dépendances améliorés dans Go
Dans Go, l'approche traditionnelle du câblage des composants consiste à instancier et à transmettre manuellement les dépendances dans la fonction principale , comme on le voit dans le code donné. Bien que cette méthode soit fonctionnelle, elle peut devenir lourde et sujette aux erreurs à mesure que la base de code se développe.
Pour résoudre ce problème, il convient d'envisager des modèles alternatifs :
1. Paramètres de fonction
Transmettez les dépendances en tant que paramètres de fonction. Cela simplifie les tests en permettant de simuler facilement les dépendances.
func someConsumer(g Guy) { fmt.Println("Hello, " + g.SomeDumbGuy()) } func main() { var d datstr someConsumer(d) }
2. Fonctions d'usine
Créez des fonctions d'usine qui renvoient des objets avec des dépendances déjà injectées. Cela centralise l'injection de dépendances et facilite la configuration des dépendances en fonction d'un contexte spécifique.
func NewGuy() Guy { return &datstr{} } func someConsumer(g Guy) { fmt.Println("Hello, " + g.SomeDumbGuy()) } func main() { g := NewGuy() someConsumer(g) }
3. Middleware
Utilisez des fonctions middleware pour intercepter les requêtes et injecter des dépendances dans le contexte de la requête. Cela offre de la flexibilité et permet une injection dynamique de dépendances.
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) }
Évitez les bibliothèques DI
Contrairement à d'autres langages, Go ne nécessite pas l'utilisation d'une injection de dépendances (DI ) bibliothèque. En fait, les bibliothèques DI peuvent introduire une complexité et une abstraction inutiles. La simplicité de Go et la gestion explicite des dépendances favorisent la transparence et la facilité de débogage.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!