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.