Reduza a complexidade e aumente a capacidade de reutilização dos seus módulos em Go através de baixo acoplamento, menos código e testes de unidade mais fáceis.
clima é responsável por instanciar o logger e a que identifica a localização atual e 01. O QUE É INJEÇÃO DE DEPENDÊNCIA? // declarações de pacote e importações omitidas type Weather struct { log log.Logger locator location.Locator } func NewWeather() *Weather { log := log.NewZapLogger() locator := location.NewIPStack() return &Weather{log: log, locator: locator} } func (w *Weather) Check() string { w.log.Info("Checking the current weather") local := w.locator.WhereAmI() return w.CheckByCoord(local.Longitude, local.Latitude) } func (w *Weather) CheckByCoord(lat float64, lon float64) string { … } interfaces conhece as implementações dessas interfaces
o princípio de responsabilidade única. Como? • movendo para outras classes quaisquer responsabilidades adicionais que uma classe possua, além de sua principal.
o princípio de inversão de controle; • obter baixo acoplamento entre as classes. Como? • movendo a criação do objeto de dependência para fora da classe e fornecendo esses objetos para ela.
de Inversão de Controle (IoC); • fazem a ligação entre as abstrações e os tipos concretos que a implementam; • sabe como instanciar as implementações; • analisam os tipos de cada argumento do construtor e injeta as dependências nele.
tag garante que esse arquivo não seja incluído na build final. package main import ( "github.com/angelokurtis/golang-meetup/internal/http" "github.com/angelokurtis/golang-meetup/internal/log" "github.com/angelokurtis/golang-meetup/pkg/forecast" "github.com/angelokurtis/golang-meetup/pkg/location" "github.com/google/wire" ) func Initialize() *Weather { wire.Build(http.Providers, log.Providers, forecast.Providers, location.Providers) return &Weather{} }