Sobes.tech
Junior — Middle

Czy możesz wyjaśnić różnice między zasadą odwracania zależności a wstrzykiwaniem zależności?

sobes.tech AI

Odpowiedź od AI

Odwrócenie zależności (Zasada odwrócenia zależności, DIP) — jest jednym z zasad SOLID, które mówią, że:

  • Moduły wysokiego poziomu nie powinny zależeć od modułów niskiego poziomu. Oba powinny zależeć od abstrakcji.
  • Abstrakcje nie powinny zależeć od szczegółów. Szczegóły powinny zależeć od abstrakcji.

Jest to zasada projektowania mająca na celu zmniejszenie powiązań i zwiększenie elastyczności kodu.

Wstrzykiwanie zależności (Dependency Injection, DI) — to wzorzec lub technika, która realizuje zasadę odwrócenia zależności w praktyce. DI oznacza, że zależności (obiekty potrzebne klasie do działania) są przekazywane z zewnątrz, a nie tworzone wewnątrz klasy.

Przykład:

protocol Service {
    func doSomething()
}

class RealService: Service {
    func doSomething() { print("Praca serwisu") }
}

class Client {
    let service: Service

    // Wstrzykiwanie zależności przez konstruktor
    init(service: Service) {
        self.service = service
    }

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

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

Tutaj DIP to pomysł, że Client zależy od abstrakcji Service, a nie od konkretnej implementacji RealService. DI to sposób przekazywania konkretnej implementacji do Client z zewnątrz.

Podsumowując:

  • DIP — zasada projektowania.
  • DI — sposób realizacji tej zasady.