Sobes.tech
Junior — Middle

Můžete vysvětlit rozdíly mezi principem inverze závislostí a injekcí závislostí?

sobes.tech AI

Odpověď od AI

Princip inverze závislostí (Principle inverze závislostí, DIP) — je jedním z principů SOLID, který říká, že:

  • Moduly vysoké úrovně by neměly záviset na modulech nízké úrovně. Oba by měly záviset na abstrakcích.
  • Abstrakce by neměly záviset na detailech. Detaily by měly záviset na abstrakcích.

Toto je princip návrhu zaměřený na snížení vazebnosti a zvýšení flexibility kódu.

Vstřikování závislostí (Dependency Injection, DI) — je vzor nebo technika, která implementuje princip inverze závislostí v praxi. DI znamená, že závislosti (objekty, které jsou potřebné třídě pro práci) jsou předávány zvenčí, nikoli vytvářeny uvnitř třídy.

Příklad:

protocol Service {
    func doSomething()
}

class RealService: Service {
    func doSomething() { print("Práce služby") }
}

class Client {
    let service: Service

    // Vstřikování závislosti přes konstruktor
    init(service: Service) {
        self.service = service
    }

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

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

Zde je DIP myšlenka, že Client závisí na abstrakci Service, nikoli na konkrétní implementaci RealService. DI je způsob, jak předat konkrétní implementaci do Client zvenčí.

Shrnutí:

  • DIP — princip návrhu.
  • DI — způsob implementace tohoto principu.