Sobes.tech
Junior — Middle

Pouvez-vous expliquer les différences entre le principe d'inversion des dépendances et l'injection de dépendances?

sobes.tech IA

Réponse de l'IA

Inversion des dépendances (Principe d'inversion des dépendances, DIP) — est l'un des principes SOLID, qui stipule que :

  • Les modules de haut niveau ne doivent pas dépendre des modules de bas niveau. Les deux doivent dépendre d'abstractions.
  • Les abstractions ne doivent pas dépendre des détails. Les détails doivent dépendre des abstractions.

C'est un principe de conception visant à réduire le couplage et à augmenter la flexibilité du code.

Injection de dépendances (Dependency Injection, DI) — est un patron ou une technique qui met en œuvre le principe d'inversion des dépendances en pratique. DI signifie que les dépendances (objets nécessaires au fonctionnement d'une classe) sont passées de l'extérieur, plutôt que d'être créées à l'intérieur de la classe.

Exemple :

protocol Service {
    func doSomething()
}

class RealService: Service {
    func doSomething() { print("Travail du service") }
}

class Client {
    let service: Service

    // Injection de dépendance via le constructeur
    init(service: Service) {
        self.service = service
    }

    func execute() {
        service.doSomething()
    }
}

let service = RealService()
let client = Client(service: service)
client.execute()

Ici, DIP est l'idée que Client dépend de l'abstraction Service, et non de la réalisation concrète RealService. DI est la méthode de passer la réalisation concrète à Client depuis l'extérieur.

En résumé :

  • DIP — principe de conception.
  • DI — méthode de mise en œuvre de ce principe.