Sobes.tech
Junior — Middle

Puoi spiegare le differenze tra il principio di inversione delle dipendenze e l'iniezione delle dipendenze nella programmazione?

sobes.tech AI

Risposta dell'AI

Il principio di inversione delle dipendenze (Dependency Inversion Principle, DIP) è uno dei cinque principi SOLID, che afferma che i moduli di alto livello non devono dipendere direttamente dai moduli di basso livello, ma entrambi devono dipendere da astrazioni (ad esempio, interfacce). Le astrazioni non devono dipendere dai dettagli, ma i dettagli devono dipendere dalle astrazioni. Questo aiuta a rendere l'architettura più flessibile e facilmente estensibile.

L'iniezione delle dipendenze (Dependency Injection, DI) è un pattern o tecnica concreta che implementa il principio di inversione delle dipendenze. DI significa che le dipendenze di un oggetto vengono passate dall'esterno (ad esempio, tramite il costruttore, un setter o un metodo), anziché essere create all'interno dell'oggetto. Questo facilita i test e la sostituzione dei componenti.

In altre parole:

  • DIP è una regola o principio di progettazione.
  • DI è un modo di implementare questo principio nella pratica.

Esempio in Swift:

protocol NetworkService {
    func fetchData()
}

class APIService: NetworkService {
    func fetchData() {
        print("Recupero dati dall'API")
    }
}

class ViewModel {
    let networkService: NetworkService

    // Iniezione di dipendenza tramite il costruttore
    init(networkService: NetworkService) {
        self.networkService = networkService
    }

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

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