Hallo Leser!
Zuvor haben wir untersucht, wie der
VIP- Zyklus angeordnet ist und wie Übergänge zwischen Preisen und Datenübertragung vorgenommen werden können. Jetzt müssen Sie herausfinden, wie Sie unseren
Interactor aus einer Überfülle an Logik entladen und einen Teil davon zur Wiederverwendung durch andere Szenen herausnehmen können. Und die
Arbeiter werden uns dabei helfen. Das Thema ist recht bescheiden, aber wichtig zu erwähnen.

Theorie
Arbeiter sind Hilfsklassen / -strukturen (nicht zu verwechseln mit Diensten oder Helfern), deren Aufgabe es ist, einen Teil der Geschäftslogik von
Interactor zu übernehmen. Wenn die Methoden in
Interactor erweitert werden, ist es Zeit, die umfangreiche Logik in
Worker zu entfernen . In
Clean Swift werden sie verwendet, um mit der Logik der Datenspeicherung, mit dem Netzwerk, mit einzelnen Ebenen der Anwendung usw. zu arbeiten. Mit anderen Worten, alles ist umfangreich, auf niedriger Ebene und hängt nicht mit der Geschäftslogik der Anwendung zusammen.
Die Arbeitnehmer werden in zwei Haupttypen unterteilt:
- Lokal , die nur innerhalb der Szene verwendet werden.
- Global , die für jede Szene verfügbar sind.
Lokale
Arbeiter werden direkt in die Szene gestellt und nach ihr benannt -
SceneNameWorker . Globale
Worker befinden sich im
Workers- Stammverzeichnis und werden
nach ihrem Betreff benannt. Lokale
Arbeiter können auch als „Dekorateure über global“ fungieren, mit erweiterter Logik für die Bedürfnisse der Szene.
Wenn Sie die Aufteilung des Projekts in Ebenen (
Präsentation ,
Geschäftslogik ,
Persistenz ,
Netzwerklogik ) verwenden, kann die Rolle der Verbindungsbrücke zwischen der
Präsentationsebene und der
Geschäftslogik den
Mitarbeitern zugewiesen werden . Auf diese Weise werden wir
Interactor entladen, ein vorhersehbareres Verhalten erzielen und die Wiederverwendung vereinfachen.
Übe
Die Arbeit der
Arbeiter werden wir am Beispiel der Arbeit mit dem Netzwerk betrachten. Wir werden zwei Bildschirme haben - auf dem ersten wird eine Liste der Benutzer angezeigt und auf dem zweiten eine Liste der Beiträge dieses Benutzers. Alle Daten werden von der
API erfasst . Wir werden diese Aufgabe in drei
Arbeiter aufteilen, zwei lokale und einen globalen, die als Einstiegspunkt für die beiden anderen dienen. Ich werde die Implementierung der Methoden selbst im Artikel verbergen, und wer es in der Praxis ausprobieren möchte, wird am Ende des Artikels einen Link zum fertigen Projekt finden.
Diese Projektstruktur ist keine Referenz für die Arbeit mit einem Netzwerk und spiegelt in keiner Weise die Arbeitsweise in Clean Swift wider. All dies geschieht nur als gutes Beispiel für die Rolle lokaler und globaler Arbeitnehmer .Erstellen Sie zunächst einen globalen
Worker -
NetworkWorker . Platzieren Sie es im
Workers- Verzeichnis auf derselben Ebene wie das
Scenes- Verzeichnis. Im folgenden Beispiel gibt es eine
sendRequest-Methode (to: params: Completion) , die lokalen
Workern gemeinsam ist. Es führt eine Routineaufgabe aus - bildet eine Verknüpfung aus den Parametern, sendet eine Anforderung und sendet das Ergebnis zum
Abschluss .
struct NetworkWorker {
Für die erste Szene benötigen wir eine
API- Liste aller Benutzer. Dazu erstellen wir einen lokalen
HomeWorker , der die Parameter zum Laden von Benutzern konfiguriert und
sendRequest (to: params: finish) in
NetworkWorker mit diesen Parametern
aufruft . Jetzt müssen wir im
Interactor der Szene
fetchUsers aufrufen (Vervollständigung :) und die empfangenen Daten zur Verarbeitung an
Presenter senden.
Wenn Sie auf eine Tabellenzelle mit dem Benutzernamen klicken, werden wir den Übergang vornehmen und den ausgewählten Benutzer in eine andere Szene übertragen.
struct HomeWorker {
Auf der Seite mit Benutzerbeiträgen erstellen wir
PostsWorker , jedoch nur mit der Methode
fetchPosts (Benutzer-ID: abgeschlossen :) . Darin übergeben wir die ID des Benutzers, dessen Beiträge Sie herunterladen möchten. In der Methode bilden wir die Parameter und rufen
sendRequest (to: params: finish) in
NetworkWorker auf . Und auf die gleiche Weise wie zuvor rufen wir die Methode
fetchPosts (userId: complete :) im
Interactor der Szene auf und übergeben die empfangenen Daten an den
Presenter .
struct PostsWorker {
Jetzt wurde unsere gesamte Implementierung in separate Dateien verschoben, die wiederverwendet werden können, ohne die Geschäftslogik in
Interactor zu laden.
Fazit
Obwohl die
Mitarbeiter sehr einfach sind und kein verstecktes Wissen über Architektur preisgeben, ist ihre Verwendung in
Clean Swift wichtig. Vergessen Sie beim Schreiben von
Workers nicht Protokolle, Strukturmuster und DI. Andernfalls bilden Sie schnell ein Durcheinander von
Arbeitern , bei dem alles, was herausgenommen werden konnte, in Stücken herausgenommen wurde.
Das ist alles. Vielen Dank für das Lesen bis zum Ende. Unten finden Sie einen Link zum vollständigen Projekt.
Artikelserie
- Übersicht über die saubere Swift-Architektur
- Router- und Datenübergabe in einer sauberen Swift-Architektur
- Arbeiter der Clean Swift-Architektur (Sie sind hier)
- Unit-Tests in der Clean Swift-Architektur
- Ein Beispiel für eine einfache Online-Shop-Architektur Clean Swift
Link zum ProjektHilfe beim Schreiben eines Artikels:
Bastien