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.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