Abhängigkeitsumkehr IOS
Was ist Abhängigkeitsumkehr:
Die Abhängigkeitsumkehr ist ein Entwurfsprinzip, das auf die iOS-Entwicklung (sowie auf andere Softwareentwicklungen) angewendet werden kann. Das Prinzip legt nahe, dass High-Level-Module oder -Komponenten nicht direkt von Low-Level-Modulen oder -Komponenten abhängen sollten. Stattdessen sollten sowohl High-Level- als auch Low-Level-Komponenten von Abstraktionen oder Protokollen abhängen.
Warum Abstraktionen und Protokolle:
In der Praxis bedeutet dies, dass Entwickler beim Erstellen einer iOS-Anwendung Protokolle oder Schnittstellen erstellen sollten, die das Verhalten bestimmter Funktionen oder Komponenten in der App definieren. Diese Protokolle sollten dann von bestimmten Klassen oder Modulen implementiert werden, die die Funktionalität für diese Features bereitstellen.
Durch die Verwendung von Abstraktionen und Protokollen ist der Code einfacher zu warten und zu testen und ermöglicht eine größere Flexibilität beim Ändern oder Ersetzen von Komponenten, ohne die Gesamtarchitektur der App zu beeinträchtigen. Wenn beispielsweise eine bestimmte Komponente ersetzt werden muss, kann die App weiter funktionieren, solange der Ersatz dem gleichen Protokoll oder der gleichen Schnittstelle entspricht.
Praxisbeispiel:
Angenommen, Sie erstellen eine iOS-App, die Daten von einer Web-API abruft und in einer Tabellenansicht anzeigt. Eine Möglichkeit, dies zu implementieren, wäre, den Ansichtscontroller, der die Tabellenansicht verwaltet, direkte Aufrufe an eine Web-API-Clientklasse zu senden, um die Daten abzurufen.
Dadurch entsteht jedoch eine enge Kopplung zwischen dem View-Controller und dem Web-API-Client, was das Testen und Warten des Codes erschweren kann. Wenn Sie die Art und Weise ändern möchten, wie die Daten abgerufen oder angezeigt werden, müssen Sie den View-Controller ändern, was gegen das Open/Closed-Prinzip verstößt.
Um das Prinzip der Abhängigkeitsumkehr anzuwenden, können Sie eine Abstraktion in Form eines Protokolls oder einer Schnittstelle erstellen, die das Verhalten des Web-API-Clients definiert. Beispielsweise können Sie ein Protokoll definieren, das APIClientmit einer Methode namens aufgerufen wird fetchData, die ein Array von Datenobjekten zurückgibt.
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)
}
// ...
}
Sie können beispielsweise eine Scheinimplementierung erstellen, APIClientdie zu Testzwecken gefälschte Daten zurückgibt.
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)

![Was ist überhaupt eine verknüpfte Liste? [Teil 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































