Junior — Middle
Môžete vysvetliť rozdiely medzi princípom invertovania závislostí a injekciou závislostí?
sobes.tech AI
Odpoveď od AI
Princip inverzie závislostí (Princip inverzie závislostí, DIP) — je jedným z princípov SOLID, ktorý hovorí, že:
- Moduly vysokého levelu by nemali závisieť od modulov nízkeho levelu. Oba by mali závisieť od abstrakcií.
- Abstrakcie by nemali závisieť od detailov. Detaily by mali závisieť od abstrakcií.
Toto je princíp návrhu zameraný na zníženie prepojenia a zvýšenie flexibility kódu.
Vkladanie závislostí (Dependency Injection, DI) — je vzor alebo technika, ktorá implementuje princíp inverzie závislostí v praxi. DI znamená, že závislosti (objekty, ktoré sú potrebné triede na fungovanie) sú odovzdávané zvonku, nie sú vytvárané vnútri triedy.
Príklad:
protocol Service {
func doSomething()
}
class RealService: Service {
func doSomething() { print("Práca služby") }
}
class Client {
let service: Service
// Vkladanie závislosti cez konštruktor
init(service: Service) {
self.service = service
}
func execute() {
service.doSomething()
}
}
let service = RealService()
let client = Client(service: service)
client.execute()
Tu je DIP myšlienka, že Client závisí od abstrakcie Service, nie od konkrétnej implementácie RealService. DI je spôsob, ako odovzdať konkrétnu implementáciu klientovi zvonku.
Zhrnutie:
- DIP — princíp návrhu.
- DI — spôsob implementácie tohto princípu.