Sobes.tech
Junior — Middle

Оё метавонед таҷрибаи худро дар татбиқи консепсияи Inversion of Control дар лоиҳаҳо мубодила кунед?

sobes.tech AI

Ҷавоб аз AI

Истифодасозии Inversion of Control (IoC) дар Go одатан тавассути интиқоли вобастагиҳо ба конструкторҳо ё функсияҳо ба даст меояд, на тавассути фреймворҳо, ҳамчун дар дигар забонҳо. Масалан, ба ҷои он ки вобастагиҳоро дар дохили сохтор эҷод кунем, онҳоро аз берун мегузорем, ки имкон медиҳад тестгирӣ осонтар ва чандирӣ зиёд шавад.

Масалан:

// Интерфейс барои логгер
 type Logger interface {
    Log(message string)
}

// Иҷрои логгер
 type ConsoleLogger struct {}

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

// Хизмат, ки аз Logger вобаста аст
 type Service struct {
    logger Logger
}

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

func (s *Service) DoWork() {
    s.logger.Log("Кори анҷом ёфт")
}

// Истифода
logger := &ConsoleLogger{}
service := NewService(logger)
service.DoWork()

Ин усул имкон медиҳад, ки ба осонӣ иҷроишҳои вобастагиро иваз кунем ва тестҳои ягонаро содда гардонем.