Sobes.tech
Junior — Middle

Можете ли да објасните разлике између концепата Dependency Injection и Dependency Inversion у контексту развоја софтвера?

sobes.tech АИ

Одговор од АИ

Ubacivanje zavisnosti (DI) — je obrazac dizajna u kojem se zavisnosti objekta prosleđuju spolja, umesto da se kreiraju unutar njega. Ovo omogućava lako menjanje implementacija zavisnosti, pojednostavljuje testiranje i povećava modularnost koda.

Princip obrtanja zavisnosti (DIP) — jedan od pet SOLID principa, koji kaže da:

  • Moduli visokog nivoa ne bi trebalo da zavise od modula niskog nivoa. Oba bi trebalo da zavise od apstrakcija.
  • Apstrakcije ne bi trebalo da zavise od detalja. Detalji bi trebalo da zavise od apstrakcija.

Jednostavnije rečeno, DIP je usmeren na smanjenje povezanosti između komponenti korišćenjem apstrakcija (npr. interfejsa).

Veza između njih: DI je način implementacije DIP. Koristeći DI, prosleđujemo zavisnosti putem konstruktora ili setera, što omogućava modulima da zavise od apstrakcija, a ne od konkretnih implementacija.

Primer u Swift-u:

protocol NetworkService {
    func fetchData()
}

class APIService: NetworkService {
    func fetchData() {
        print("Preuzimanje podataka sa API")
    }
}

class ViewModel {
    private let networkService: NetworkService

    // Injektovanje zavisnosti putem konstruktora
    init(networkService: NetworkService) {
        self.networkService = networkService
    }

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

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

Ovde, ViewModel zavisi od apstrakcije NetworkService (DIP), a konkretna implementacija se prosleđuje spolja (DI).