Sobes.tech
Junior — Middle

Môžete vysvetliť rozdiely medzi princípom invertovania závislostí a injekciou závislostí v programovaní?

sobes.tech AI

Odpoveď od AI

Princíp invertovania závislostí (Dependency Inversion Principle, DIP) je jeden z piatich princípov SOLID, ktorý hovorí, že moduly vysokého úrovňa by nemali závisieť priamo od modulov nízkeho úrovňa, ale obidva by mali závisieť od abstrakcií (napríklad rozhraní). Abstrakcie by nemali závisieť od detailov, ale detaily by mali závisieť od abstrakcií. To pomáha urobiť architektúru flexibilnejšou a ľahšie rozšíriteľnou.

Vstrekovanie závislostí (Dependency Injection, DI) je konkrétny vzor alebo technika, ktorá implementuje princíp invertovania závislostí. DI znamená, že závislosti objektu sú mu odovzdávané zvonku (napríklad cez konštruktor, setter alebo metódu), namiesto toho, aby boli vytvárané vo vnútri objektu. To uľahčuje testovanie a výmenu komponentov.

Inými slovami:

  • DIP je pravidlo alebo princíp návrhu.
  • DI je spôsob, ako tento princíp v praxi realizovať.

Príklad v Swift:

protocol NetworkService {
    func fetchData()
}

class APIService: NetworkService {
    func fetchData() {
        print("Získavanie dát z API")
    }
}

class ViewModel {
    let networkService: NetworkService

    // Vstrekovanie závislosti cez konštruktor
    init(networkService: NetworkService) {
        self.networkService = networkService
    }

    func load() {
        networkService.fetchData()
    }
}

let apiService = APIService()
let viewModel = ViewModel(networkService: apiService)
viewModel.load()