Hola lector
Anteriormente, examinamos cómo se organiza el ciclo 
VIP y cómo hacer transiciones entre precios y transferencia de datos. Ahora necesita descubrir cómo descargar nuestro 
Interactor de una sobreabundancia de lógica y extraer parte de él para su reutilización en otras escenas. Y los 
trabajadores nos ayudarán con esto. El tema es bastante modesto en volumen, pero es importante mencionarlo.

Teoría
Los trabajadores son clases / estructuras auxiliares (que no deben confundirse con servicios o ayudantes) cuya tarea es asumir parte de la lógica comercial de 
Interactor . Si los métodos en 
Interactor se están expandiendo, es hora de eliminar la voluminosa lógica en 
Worker . En 
Clean Swift, se utilizan para trabajar con la lógica del almacenamiento de datos, con la red, con capas individuales de la aplicación, etc. En otras palabras, todo es voluminoso, de bajo nivel y no está relacionado con la lógica empresarial de la aplicación.
Los trabajadores se dividen en dos tipos principales:
- Locales que se usan solo dentro de la escena.
- Global que están disponibles para cualquier escena.
Los 
trabajadores locales se colocan directamente dentro de la escena y llevan su nombre: 
SceneNameWorker . Los 
trabajadores globales se encuentran en el directorio raíz de los 
trabajadores y se nombran 
según su tema. Los 
trabajadores locales también pueden actuar como "decoradores sobre global", con una lógica extendida para las necesidades de la escena.
Si utiliza la separación del proyecto en capas ( 
Presentación , 
Lógica empresarial , 
Persistencia , 
Lógica de red ), la función del puente de conexión entre la capa 
Presentación y 
la Lógica empresarial puede 
asignarse a los 
Trabajadores . Por lo tanto, descargaremos 
Interactor , obtendremos un comportamiento más predecible y facilidad de reutilización.
Practica
El trabajo de los 
trabajadores lo consideraremos en el ejemplo de trabajar con la red. Tendremos dos pantallas: en la primera, se muestra una lista de usuarios, y en la segunda, una lista de publicaciones de este usuario. Todos los datos serán tomados por 
API . Dividiremos esta tarea en tres 
trabajadores , dos locales y uno global, que actuarán como punto de entrada para los otros dos. Ocultaré la implementación de los métodos mismos en el artículo, y quien quiera probar en la práctica, habrá un enlace al proyecto terminado al final del artículo.
 Esta estructura de proyecto no es una referencia para trabajar con una red y no refleja de ninguna manera cómo trabajar con ella en Clean Swift . Todo esto se hace solo como un buen ejemplo del papel de los trabajadores locales y globales.
Esta estructura de proyecto no es una referencia para trabajar con una red y no refleja de ninguna manera cómo trabajar con ella en Clean Swift . Todo esto se hace solo como un buen ejemplo del papel de los trabajadores locales y globales.Para comenzar, cree un 
Trabajador global: 
NetworkWorker . Colóquelo en el directorio 
Trabajadores , al mismo nivel que el directorio 
Escenas . En el siguiente ejemplo, hay un 
método sendRequest (to: params: complete) , que será común a los 
trabajadores locales. Realiza una tarea de rutina: forma un enlace a partir de los parámetros, envía una solicitud y envía el resultado a su 
finalización .
struct NetworkWorker {  
Para la primera escena, necesitamos obtener una lista 
API de todos los usuarios. Para hacer esto, creamos un 
HomeWorker local que configurará los parámetros para cargar usuarios y llamará a 
sendRequest (a: params: complete) en 
NetworkWorker con estos parámetros. Ahora en el 
Interactor de la escena 
, necesitamos llamar a 
fetchUsers (finalización :) y enviar los datos recibidos para su procesamiento al 
Presentador .
Cuando hace clic en una celda de la tabla con el nombre de usuario, haremos la transición y transferiremos al usuario seleccionado a otra escena.
 struct HomeWorker {  
En la página con publicaciones de usuario, creamos 
PostsWorker , pero solo con el 
método fetchPosts (userId: complete :) . En él pasamos la identificación del usuario cuyas publicaciones desea descargar. En el método, formamos los parámetros y llamamos 
sendRequest (a: params: complete) en 
NetworkWorker . Y de la misma manera que antes, llamamos al 
método fetchPosts (userId: complete :) en el 
Interactor de la escena, pasando los datos recibidos al 
Presentador .
 struct PostsWorker {  
Ahora toda nuestra implementación se ha movido a archivos separados que se pueden reutilizar, sin cargar la lógica empresarial en 
Interactor .
Conclusión
Aunque los 
trabajadores son muy simples y no revelan ningún conocimiento oculto sobre arquitectura, su uso es importante en 
Clean Swift . Cuando escriba 
Trabajadores , no se olvide de protocolos, patrones estructurales y DI. De lo contrario, rápidamente formará un desastre de 
Trabajadores , donde todo lo que se podría sacar se hizo pedazos.
Eso es todo Gracias por leer hasta el final, a continuación hay un enlace al proyecto completo.
Serie de artículos
- Descripción general de la arquitectura Clean Swift
- Enrutador y paso de datos en la arquitectura Clean Swift
- Trabajadores de la arquitectura Clean Swift (estás aquí)
- Pruebas unitarias en arquitectura Clean Swift
- Un ejemplo de una arquitectura simple de tienda en línea Clean Swift
Enlace al proyectoAyuda para escribir un artículo: 
Bastien