En un proyecto de software en el que utilicemos el framework Spring, tanto si es en un microservicio, como una aplicación Web o un proceso por lotes, es muy común necesitar un cliente HTTP que llame a otro servidor y cuente con su propio modelo de datos siguiendo el patrón DTO (Data Transfer Object).

Por qué

Puede parecer algo obvio, pero si toda ésta lógica está mezclada, no permite la re utilización y lo que considero aún mas importante, aumenta “carga cognitiva”.

Tanto si contamos con un nuevo miembro del equipo que va a revisar el código, como la necesidad de añadir nuevos requisitos, siempre será mucho más fácil tener aislados los datos que vamos a recibir de cualquier otro servicio.

Cómo

Lo principal es que el módulo cliente cuente con todo lo que necesita:

  • Configuración: Mediante este archivo, podremos parametrizar la configuración de nuestro cliente (URL, puerto, etc)
  • DTO: Clases encargadas de transferir los datos recibidos. Que nuestro cliente disponga de su propio modelo, en lugar de utilizar un controlador de versiones es clave.
  • Service: Clases con la lógica de negocio.
module
    ├───.mvn
    │   └───wrapper
    └───src
        ├───main
        │   ├───java
        │   │   └───com
        │   │       └───juanmorschrott
        │   │           └───module
        │   │               └───client
        │   │                   ├───configuration
        │   │                   ├───dto
        │   │                   └───service
        │   └───resources
        └───test
            └───java
                └───com
                    └───juanmorschrott
                        └───module

Esta estructura y utilizar la anotación @Service nos permite utilizar ahora nuestro cliente desde cualquier otra parte de nuestro proyecto de la siguiente manera:

...
@Autowired
private UserService service;
...
service.getUser("1");
...

Podemos además, copiar la carpeta raíz y reutilizarlo en otra aplicación.
Podéis ver el código de ejemplo aquí.

Conclusión

Mantenlo simple para reducir la carga cognitiva

Uncle Bob

Aislando nuestro cliente WEB en su propia estructura de carpetas, incluyendo su modelo y proporcionando una API adecuada podemos aislar su lógica, de manera que sea más fácil trasladar de un proyecto a otro, realizar modificaciones y facilitar la vida a nuevos miembros del equipo.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Translate