Bonjour lecteur!
Plus tôt, nous avons examiné comment le cycle
VIP est organisé et comment effectuer des transitions entre les prix et le transfert de données. Vous devez maintenant comprendre comment décharger notre
Interactor d'une surabondance de logique et en retirer une partie pour la réutiliser par d'autres scènes. Et les
travailleurs nous y aideront. Le sujet est assez modeste en volume, mais important à mentionner.

Théorie
Les travailleurs sont des classes / structures auxiliaires (à ne pas confondre avec les services ou les aides) dont la tâche est de reprendre une partie de la logique métier d’
Interactor . Si les méthodes d'
Interactor se développent, il est temps de supprimer la logique volumineuse de
Worker . Dans
Clean Swift, ils sont utilisés pour travailler avec la logique de stockage des données, avec le réseau, avec les couches individuelles de l'application, etc. En d'autres termes, tout est volumineux, bas niveau et non lié à la logique métier de l'application.
Les travailleurs sont divisés en deux types principaux:
- Local utilisé uniquement à l'intérieur de la scène.
- Global qui sont disponibles pour n'importe quelle scène.
Les
travailleurs locaux sont placés directement à l'intérieur de la scène et portent son nom -
SceneNameWorker . Les
travailleurs globaux se trouvent dans le répertoire racine des
travailleurs et sont nommés en
fonction de leur sujet. Les
travailleurs locaux peuvent également agir en tant que «décorateurs au niveau mondial», avec une logique étendue pour les besoins de la scène.
Si vous utilisez la séparation du projet en couches (
Présentation ,
Business Logic ,
Persistance ,
Logique réseau ), le rôle de pont de connexion entre la couche
Présentation et
Business Logic peut être
attribué à
Workers . Ainsi, nous allons décharger
Interactor , obtenir un comportement plus prévisible et une facilité de réutilisation.
Pratique
Le travail des
travailleurs que nous considérerons sur l'exemple du travail avec le réseau. Nous aurons deux écrans - sur le premier une liste d'utilisateurs est affichée, et sur le second une liste de messages de cet utilisateur. Toutes les données seront prises par l'
API . Nous diviserons cette tâche en trois
travailleurs , deux locaux et un mondial, qui serviront de point d'entrée pour les deux autres. Je cacherai l'implémentation des méthodes elles-mêmes dans l'article, et quiconque veut essayer en pratique, il y aura un lien vers le projet fini à la fin de l'article.
Cette structure de projet n'est pas une référence pour travailler avec un réseau et ne reflète en aucune façon comment l'utiliser avec Clean Swift . Tout cela n'est fait que pour un bon exemple du rôle des travailleurs locaux et mondiaux.Pour commencer, créez un
Worker global -
NetworkWorker . Placez-le dans le répertoire
Workers , au même niveau que le répertoire
Scenes . Dans l'exemple ci-dessous, il existe une
méthode sendRequest (to: params: complétement) , qui sera commune aux
Workers locaux. Il effectue une tâche de routine - forme un lien à partir des paramètres, envoie une demande et envoie le résultat à son
terme .
struct NetworkWorker {
Pour la première scène, nous devons obtenir une liste d'
API de tous les utilisateurs. Pour ce faire, nous créons un
HomeWorker local qui configurera les paramètres de chargement des utilisateurs et appellera
sendRequest (à: params: achèvement) dans
NetworkWorker avec ces paramètres. Maintenant, dans l'
interacteur de la scène
, nous devons appeler
fetchUsers (achèvement :) et envoyer les données reçues pour traitement à
Presenter .
Lorsque vous cliquez sur une cellule du tableau avec le nom d'utilisateur, nous effectuons la transition et transférons l'utilisateur sélectionné vers une autre scène.
struct HomeWorker {
Sur la page avec les publications des utilisateurs, nous créons
PostsWorker , mais uniquement avec la
méthode fetchPosts (userId: complete :) . Nous y transmettons l'ID de l'utilisateur dont vous souhaitez télécharger les publications. Dans la méthode, nous formons les paramètres et appelons
sendRequest (à: params: achèvement) dans
NetworkWorker . Et de la même manière que précédemment, nous appelons la
méthode fetchPosts (userId: complete :) dans l'
interacteur de la scène, en transmettant les données reçues au
présentateur .
struct PostsWorker {
Maintenant, notre implémentation entière a été déplacée vers des fichiers séparés qui peuvent être réutilisés, sans charger la logique métier dans
Interactor .
Conclusion
Bien que les
Workers soient très simples et ne révèlent aucune connaissance cachée de l'architecture, leur utilisation est importante dans
Clean Swift . Lorsque vous écrivez
Workers , n'oubliez pas les protocoles, les modèles structurels et l'ID. Sinon, vous formerez rapidement un gâchis d'
ouvriers , où tout ce qui pourrait être retiré a été retiré en morceaux.
C’est tout. Merci d'avoir lu jusqu'à la fin, voici un lien vers le projet complet.
Série d'articles
- Présentation de Clean Swift Architecture
- Routeur et transmission de données dans une architecture propre et rapide
- Travailleurs de l'architecture Clean Swift (vous êtes ici)
- Tests unitaires dans l'architecture Clean Swift
- Un exemple d'une architecture de boutique en ligne simple Clean Swift
Lien vers le projetAide à la rédaction d'un article:
Bastien