Sobes.tech
Junior — Middle

Môžete vysvetliť rozdiely medzi konceptmi Dependency Injection a Dependency Inversion v kontexte vývoja softvéru?

sobes.tech AI

Odpoveď od AI

Vstrekovanie závislostí (DI) — je návrhový vzor, pri ktorom sú závislosti objektu odovzdávané zvonku, namiesto toho, aby boli vytvorené vo vnútri. To umožňuje ľahko meniť implementácie závislostí, zjednodušuje testovanie a zvyšuje modularitu kódu.

Princíp obrátenia závislostí (DIP) — jeden z piatich SOLID princípov, ktorý hovorí, že:

  • Moduly vysokého úrovne by nemali závisieť od modulov nízkeho úrovne. Oba by mali závisieť od abstrakcií.
  • Abstrakcie by nemali závisieť od detailov. Detaily by mali závisieť od abstrakcií.

Jednoducho povedané, DIP sa zameriava na zníženie prepojenia medzi komponentmi pomocou použitia abstrakcií (napríklad rozhraní).

Vztah medzi nimi: DI je spôsob implementácie DIP. Použitím DI odovzdávame závislosti cez konštruktor alebo settery, čo umožňuje moduly závisieť od abstrakcií, nie od konkrétnych implementácií.

Príklad v Swift:

protocol NetworkService {
    func fetchData()
}

class APIService: NetworkService {
    func fetchData() {
        print("Dáta z API")
    }
}

class ViewModel {
    private let networkService: NetworkService

    // Injektovanie závislostí cez konštruktor
    init(networkService: NetworkService) {
        self.networkService = networkService
    }

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

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

Tu, ViewModel závisí od abstrakcie NetworkService (DIP), a konkrétna implementácia je odovzdaná zvonku (DI).