Pollito Blog
October 2, 2024

La opinión de Pollito acerca del desarrollo en Spring Boot 0: Introducción

Posted on October 2, 2024  •  6 minutes  • 1191 words  • Other languages:  English

Conocimientos previos recomendados

Espero que usted, el lector, se sienta cómodo con conceptos de Java Spring Boot (específicamente, Spring Boot 3 y Java 21).

Pondré algunos enlaces útiles con lecturas adicionales de vez en cuando, pero no me detendré a explicar en profundidad.

Puede que estés pensando:

Pero Spring Boot es enorme, no hay forma de que necesite saberlo todo

A lo que yo digo, sí, tienes razón :D

A continuación, una lista de conceptos que considero importantes para al menos reconocer su existencia:

Concepto Definición simple Lectura recomendada
@AspectJ Framework AOP basado en anotaciones utilizado para definir responsabilidades transversales como el registro o la gestión de transacciones. Intro to AspectJ
@ConfigurationProperties Vincula propiedades de configuración externas (por ejemplo, de application.properties) a objetos Java en Spring Boot. Guide to @ConfigurationProperties in Spring Boot
@FeignClient Crea de forma declarativa clientes REST en Spring, simplificando las llamadas de servicio a servicio. Navigating Client-Server Communication with Spring’s @FeignClient Annotation
@RestController Combina @Controller y @ResponseBody, simplificando la creación de servicios web RESTful en Spring. The Spring @Controller and @RestController Annotations
@RestControllerAdvice Un @ControllerAdvice especializado para manejar excepciones en todos los @RestControllers. @RestControllerAdvice example in Spring Boot
Declarative vs Imperative programming Declarativo expresa lo que el programa debe hacer, mientras que imperativo describe cómo hacerlo paso a paso. Declarative vs imperative
Design by contract Un método de diseño de software donde las funciones declaran precondiciones, poscondiciones e invariantes. Design by contract
DTO classes Los objetos de transferencia de datos son clases simples que se utilizan para transportar datos entre procesos sin lógica empresarial. The DTO Pattern (Data Transfer Object)
ErrorDecoder Permite el manejo personalizado de errores HTTP en clientes Feign al decodificar las respuestas de error en excepciones significativas. Handling Exceptions in Feign Client with ErrorDecoder
Fast fail exception handling Una técnica en la que los sistemas detienen la ejecución inmediatamente al encontrar un error, impidiendo así el procesamiento posterior. Fast fail exception handling
Filter Intercepta y procesa solicitudes y respuestas HTTP en una aplicación Spring Boot. Spring Boot – Servlet Filter
Lombok Una biblioteca que reduce el código repetitivo en Java, proporcionando anotaciones para generar código automáticamente. Introduction to Project Lombok
MapStruct Un generador de código que simplifica el proceso de mapeo entre modelos de objetos Java. Quick Guide to MapStruct
Monitoring and Observability Herramientas y prácticas que ayudan a realizar un seguimiento del estado y el rendimiento del sistema y a detectar problemas en las aplicaciones. Monitoring and Observability with Spring Boot 3
OpenAPI Generator Una herramienta que genera código cliente/servidor basado en una especificación OpenAPI. OpenAPI Generator
OpenAPI Specification (OAS) Un estándar para definir API RESTful, que proporciona un contrato de API legible por máquina para documentación y generación de clientes. OpenAPI Specification
PIT Mutation Testing Un enfoque de prueba en el que se realizan pequeñas mutaciones en el código para garantizar que las pruebas puedan detectar cambios y errores. PIT Mutation Testing
ProblemDetail Formato estandarizado para devolver información de errores detallada en las API REST. Spring Rest - Exception Handling - Problem Details
Spring Boot - Actuator Proporciona endpoints para monitorear y administrar una aplicación Spring Boot en producción. A Comprehensive Guide to Spring Boot Actuator
Spring Initialzr Una herramienta web que ayuda a generar plantillas de proyectos Spring Boot con las dependencias deseadas. Create Spring Boot application using initializr in 5 minutes
Spring Web El módulo de Spring Boot para crear aplicaciones web, incluidas API REST y aplicaciones basadas en MVC. Exploring the Spring Web Dependency — A Beginner’s Overview

Si hay cosas de las que no estás seguro o que nunca has puesto en práctica, no te preocupes demasiado. Aprenderás sobre la marcha (pero no esperes de mí una explicación detallada).

Objetivos

¿Qué espero lograr con la serie de blogs “La opinión de Pollito sobre el desarrollo de Spring Boot”?

Inspiración (¿Por qué estoy escribiendo esta serie de blogs?)

Solución interna del Banco Pichincha

En mi rol actual, el desarrollo impulsado por contratos es obligatorio.

Para ayudar con eso, el banco compró esta librería súper secreta y poderosa a la cual dada algunos yaml + configuraciones en build.gradle, en la compilación genera mucho código relacionado con cosas como interfaces de controlador, interfaces de clientes, entidades de bases de datos, e incluso se le puede decir a la librería si desea el proyecto en forma MVC o Spring Reactor.

No tengo pruebas definitivas sobre la siguiente afirmación, pero creo que la biblioteca súper secreta y poderosa está construida sobre un fork de OpenAPI Generator , un proyecto de código abierto centrado en la generación de código.

Este enfoque tiene dos grandes problemas:

Pero incluso con esos problemas, no estoy en contra de la idea. Soy el tipo de desarrollador que prefiere la programación declarativa a la programación imperativa.

¿Qué preferirías?

El tutorial típico de Youtube y Udemy preferiría lo primero, yo prefiero lo segundo.

La idea de Banco Pichincha es buena, la ejecución salió mal. ¡Sé qué se puede hacer mejor! Eso llevó a la creación de esta serie de blogs.

shadcn/ui

shadcn/ui es una colección de componentes reutilizables que puedes copiar y pegar en tus aplicaciones. Puede utilizar cualquier marco que admita React.

¿Cómo es eso una inspiración para los proyectos Spring Boot? Está en el lado opuesto del espectro del desarrollo. La inspiración proviene de esta sección en preguntas frecuentes :

La idea detrás de esto es brindarle propiedad y control sobre el código, permitiéndole decidir cómo se construyen y diseñan los componentes. Comience con algunos valores predeterminados sensatos y luego personalice los componentes según sus necesidades. Uno de los inconvenientes de empaquetar los componentes en un paquete npm es que el estilo va unido a la implementación. El diseño de sus componentes debe estar separado de su implementación.

Eso se alinea perfectamente con uno de los objetivos:

Tener un punto de partida es excelente, pero eso no debería ser un problema cuando los requisitos del negocio exigen que nos adaptemos.

Siguiente lectura

La opinión de Pollito acerca del desarrollo en Spring Boot 1: Desarrollo impulsado por contratos

Hey, check me out!

You can find me here