Sobes.tech
Junior — Middle

Можете ли објаснити разлике између принципа инверзије зависности и убризгавања зависности?

sobes.tech АИ

Одговор од АИ

Princip inverzije zavisnosti (Princip inverzije zavisnosti, DIP) — jedan je od SOLID principa, koji kaže da:

  • Moduli visokog nivoa ne bi trebalo da zavise od modula niskog nivoa. Oba treba da zavise od apstrakcija.
  • Apstrakcije ne bi trebalo da zavise od detalja. Detalji treba da zavise od apstrakcija.

Ovo je princip dizajna koji ima za cilj smanjenje povezanosti i povećanje fleksibilnosti koda.

Umetanje zavisnosti (Dependency Injection, DI) — je obrazac ili tehnika koja implementira princip inverzije zavisnosti u praksi. DI znači da se zavisnosti (objekti koji su potrebni klasi za rad) prosleđuju spolja, a ne kreiraju unutar klase.

Primer:

protocol Service {
    func doSomething()
}

class RealService: Service {
    func doSomething() { print("Rad servisa") }
}

class Client {
    let service: Service

    // Umetanje zavisnosti putem konstruktora
    init(service: Service) {
        self.service = service
    }

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

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

Ovde, DIP je ideja da Client zavisi od apstrakcije Service, a ne od konkretne implementacije RealService. DI je način prosleđivanja konkretne implementacije u Client spolja.

Rezime:

  • DIP — princip dizajna.
  • DI — način implementacije ovog principa.