Sobes.tech
Junior — Middle

Layihələrdə Inversion of Control konseptinin tətbiqi təcrübənizi paylaşa bilərsinizmi?

sobes.tech Süni İntellekt

AI-dan cavab

Go-da Inversion of Control (IoC) tətbiqi adətən asılılıqları quruculara və ya funksiyalara ötürməklə əldə edilir, digər dillərdəki kimi çərçivələr vasitəsilə deyil. Məsələn, struktura daxilində asılılıqları yaratmaq yerinə, onları xaricdən ötürürük, bu da test etməyi asanlaşdırır və çevikliyi artırır.

Nümunə:

// Logger üçün interfeys
 type Logger interface {
    Log(message string)
}

// Logger tətbiqi
 type ConsoleLogger struct {}

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

// Logger-dən asılı olan xidmət
 type Service struct {
    logger Logger
}

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

func (s *Service) DoWork() {
    s.logger.Log("İş tamamlandı")
}

// İstifadə
logger := &ConsoleLogger{}
service := NewService(logger)
service.DoWork()

Bu yanaşma asılılıqları asanlıqla dəyişdirməyə və vahid testləri sadələşdirməyə imkan verir.