Sobes.tech
Junior — Middle

Puteți explica diferențele dintre principiul inversiunii dependențelor și injecția de dependențe?

sobes.tech AI

Răspuns de la AI

Inversiunea dependențelor (Principiul inversiunii dependențelor, DIP) — este unul dintre principiile SOLID, care afirmă că:

  • Modulele de nivel înalt nu trebuie să depindă de modulele de nivel inferior. Ambele trebuie să depindă de abstracții.
  • Abstracțiile nu trebuie să depindă de detalii. Detaliile trebuie să depindă de abstracții.

Acesta este un principiu de proiectare care vizează reducerea cuplajului și creșterea flexibilității codului.

Injectarea dependențelor (Dependency Injection, DI) — este un pattern sau tehnică care implementează în practică principiul inversiunii dependențelor. DI înseamnă că dependențele (obiecte de care are nevoie o clasă pentru a funcționa) sunt transmise din exterior, nu sunt create în interiorul clasei.

Exemplu:

protocol Service {
    func doSomething()
}

class RealService: Service {
    func doSomething() { print("Lucru al serviciului") }
}

class Client {
    let service: Service

    // Injectarea dependenței prin constructor
    init(service: Service) {
        self.service = service
    }

    func execute() {
        service.doSomething()
    }
}

let service = RealService()
let client = Client(service: service)
client.execute()

Aici, DIP este ideea că Client depinde de abstracția Service, nu de implementarea concretă RealService. DI este modul de a transmite implementarea concretă către Client din exterior.

Rezumat:

  • DIP — principiu de proiectare.
  • DI — mod de a implementa acest principiu.