Inversion de dépendance IOS
Qu'est-ce que l'inversion de dépendance :
L'inversion de dépendance est un principe de conception qui peut être appliqué au développement iOS (ainsi qu'à d'autres développements de logiciels). Le principe suggère que les modules ou composants de haut niveau ne doivent pas dépendre directement des modules ou composants de bas niveau. Au lieu de cela, les composants de haut niveau et de bas niveau devraient dépendre d'abstractions ou de protocoles.
Pourquoi abstractions et protocoles :
Concrètement, cela signifie que lors de la création d'une application iOS, les développeurs doivent créer des protocoles ou des interfaces qui définissent le comportement de certaines fonctionnalités ou composants de l'application. Ces protocoles doivent ensuite être implémentés par des classes ou des modules spécifiques qui fournissent la fonctionnalité pour ces fonctionnalités.
en utilisant des abstractions et des protocoles, le code est plus facile à maintenir et à tester, et il permet une plus grande flexibilité pour modifier ou remplacer des composants sans affecter l'architecture globale de l'application. Par exemple, si un certain composant doit être remplacé, l'application peut continuer à fonctionner tant que le remplacement est conforme au même protocole ou à la même interface.
Exemple pratique :
Supposons que vous construisez une application iOS qui récupère des données à partir d'une API Web et les affiche dans une vue tableau. Une façon d'implémenter cela serait de faire en sorte que le contrôleur de vue qui gère la vue de la table effectue des appels directs à une classe de client API Web pour récupérer les données.
Cependant, cela crée un couplage étroit entre le contrôleur de vue et le client de l'API Web, ce qui peut rendre le code difficile à tester et à maintenir. Si vous voulez changer la façon dont les données sont récupérées ou affichées, vous devrez modifier le contrôleur de vue, ce qui viole le principe ouvert/fermé.
Pour appliquer le principe de l'inversion des dépendances, vous pouvez créer une abstraction sous la forme d'un protocole ou d'une interface qui définit le comportement du client API Web. Par exemple, vous pouvez définir un protocole appelé APIClientavec une méthode appelée fetchData, qui renvoie un tableau d'objets de données.
protocol APIClient {
func fetchData(completion: @escaping ([DataObject]) -> Void)
}
class WebAPIClient: APIClient {
func fetchData(completion: @escaping ([DataObject]) -> Void) {
// Make HTTP request to fetch data and call completion block
}
}
class TableViewController: UIViewController {
let apiClient: APIClient
init(apiClient: APIClient) {
self.apiClient = apiClient
super.init(nibName: nil, bundle: nil)
}
// ...
}
Par exemple, vous pouvez créer une implémentation fictive de APIClientqui renvoie de fausses données à des fins de test.
class MockAPIClient: APIClient {
func fetchData(completion: @escaping ([DataObject]) -> Void) {
let dataObjects = [DataObject(id: 1, name: "Object 1"),
DataObject(id: 2, name: "Object 2")]
completion(dataObjects)
}
}
let mockAPIClient = MockAPIClient()
let tableViewController = TableViewController(apiClient: mockAPIClient)
![Qu'est-ce qu'une liste liée, de toute façon? [Partie 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































