Sobes.tech
Junior — Middle

Puteți explica diferențele dintre principiul inversiunii dependențelor și injecția de dependențe în programare?

sobes.tech AI

Răspuns de la AI

Principiul inversiunii dependențelor (Dependency Inversion Principle, DIP) este unul dintre cele cinci principii SOLID, care afirmă că modulele de nivel înalt nu trebuie să depindă direct de modulele de nivel inferior, ci ambele trebuie să depindă de abstracții (de exemplu, interfețe). Abstracțiile nu trebuie să depindă de detalii, ci detaliile trebuie să depindă de abstracții. Acest lucru ajută la crearea unei arhitecturi mai flexibile și mai ușor de extins.

Injecția de dependențe (Dependency Injection, DI) este un pattern sau tehnică concretă care implementează principiul inversiunii dependențelor. DI înseamnă că dependențele unui obiect sunt transmise din exterior (de exemplu, prin constructor, setter sau metodă), în loc să fie create în interiorul obiectului. Acest lucru facilitează testarea și înlocuirea componentelor.

Cu alte cuvinte:

  • DIP este o regulă sau un principiu de proiectare.
  • DI este o modalitate de a implementa acest principiu în practică.

Exemplu în Swift:

protocol NetworkService {
    func fetchData()
}

class APIService: NetworkService {
    func fetchData() {
        print("Obținerea datelor de la API")
    }
}

class ViewModel {
    let networkService: NetworkService

    // Injecție de dependență prin constructor
    init(networkService: NetworkService) {
        self.networkService = networkService
    }

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

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