Sobes.tech
Junior — Middle

Czy możesz podzielić się swoim doświadczeniem w implementacji koncepcji Inversion of Control w projektach?

sobes.tech AI

Odpowiedź od AI

Implementacja Inversion of Control (IoC) w Go zazwyczaj osiąga się poprzez przekazywanie zależności do konstruktorów lub funkcji, a nie przez frameworki, jak w innych językach. Na przykład, zamiast tworzyć zależności wewnątrz struktury, przekazujemy je z zewnątrz, co ułatwia testowanie i zwiększa elastyczność.

Przykład:

// Interfejs dla loggera
 type Logger interface {
    Log(message string)
}

// Implementacja loggera
 type ConsoleLogger struct {}

func (c *ConsoleLogger) Log(message string) {
    fmt.Println(message)
}

// Serwis zależny od Loggera
 type Service struct {
    logger Logger
}

func NewService(logger Logger) *Service {
    return &Service{logger: logger}
}

func (s *Service) DoWork() {
    s.logger.Log("Praca wykonana")
}

// Użycie
logger := &ConsoleLogger{}
service := NewService(logger)
service.DoWork()

Takie podejście pozwala na łatwą zmianę implementacji zależności i upraszcza testy jednostkowe.