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.