iOS Interview Prep 6 - Injection de dépendance

May 04 2023
Questions d'entretien L'inversion de contrôle est un modèle de conception de logiciel qui se concentre sur le transfert de contrôle du développeur au framework. Le framework est alors responsable de la création et de la gestion des instances d'objets, tandis que le développeur est chargé de fournir les configurations spécifiques à l'application.

Questions d'entretien

  1. Qu'est-ce que l'injection de dépendances et pourquoi est-ce utile ?
  2. Pouvez-vous donner un exemple d'utilisation de l'injection de dépendances dans iOS ?
  3. Quels sont les différents types d'injection de dépendance (injection de constructeur, injection de setter, etc.) et quand doit-on utiliser chaque type ?
  4. Comment l'injection de dépendances peut-elle être utilisée pour améliorer la testabilité d'une application iOS ?
  5. Pouvez-vous discuter de certains défis ou pièges courants qui surviennent lors de l'utilisation de l'injection de dépendances dans le développement iOS, et comment les éviter ?
  6. Quels sont les frameworks d'injection de dépendance iOS les plus populaires, et quels sont leurs principales fonctionnalités et avantages ?
  7. Pouvez-vous discuter de certaines des meilleures pratiques d'utilisation de l'injection de dépendances dans le développement iOS ?

L'inversion de contrôle est un modèle de conception logicielle qui se concentre sur le transfert de contrôle du développeur au framework. Le framework est alors responsable de la création et de la gestion des instances d'objets, tandis que le développeur est chargé de fournir les configurations spécifiques à l'application.

C'est un modèle qui vous permet d'inverser le flux de contrôle. Pour y parvenir, vous déplacez toutes les responsabilités d'une classe, à l'exception de sa principale, à l'extérieur, ce qui en fait ses dépendances. Ainsi votre objet ne sait pas comment les créer. Cela rend le code testable et maintenable en éliminant les relations étroites entre les classes.

Injection de dépendance

L'injection de dépendance est l'un des rares modèles qui aide à appliquer les principes d'inversion de contrôle. Vous pouvez implémenter DI de plusieurs manières

Injection de constructeur

Dans Constructor Injection, nous transmettons toutes les dépendances via le constructeur en tant que paramètres.

protocol EngineProtocol {
  func start()
  func stop()
}

protocol TransmissionProtocol {
  func changeGear(gear: Gear)
}

final class Car {
  private let engine: EngineProtocol
  private let transmission: TransmissionProtocol

  init(engine: EngineProtocol, transmission: TransmissionProtocol) {
    self.engine = engine
    self.transmission = transmission
  }
}

final class Car {
  private var engine: EngineProtocol?
  private var transmission: TransmissionProtocol?

  func setEngine(engine: EngineProtocol) {
    self.engine = engine
  }

  func setTransmission(transmission: TransmissionProtocol) {
    self.transmission = transmission
  }
}

L'idée principale est qu'un morceau de code qui nécessite certaines dépendances ne les créera pas pour lui-même, mais plutôt que le contrôle de la fourniture de ces dépendances est reporté à une abstraction plus élevée.

Le principal avantage de l'inversion de contrôle est que

  • DI aide à améliorer la modularité de votre code, plus facile à comprendre et à maintenir
  • Facile à injecter des dépendances factices ou factices pendant les tests
  • Flexibilité et extensibilité de votre application, en vous permettant de remplacer ou d'échanger facilement les dépendances utilisées par vos composants.