Saltar a contenido

Arquitectura Hexagonal en Kotlin

Esta guía acompaña la charla de BAQJUG "El dominio que no conoce a Spring", y se puede seguir sola, de principio a fin. Construimos desde cero un servicio de pagos con arquitectura hexagonal en Kotlin, y al final una interfaz en Vaadin.

Si nunca armaste un proyecto hexagonal, tranquilo: empezamos generando el proyecto con el asistente de Spring, agregando dependencias y creando las carpetas una por una. Y si nunca tocaste Kotlin, también: vamos explicando cada cosa del lenguaje a medida que aparece.

Kotlin no es solo para mobile

Mucha gente cree que Kotlin sirve solo para Android. Kotlin corre sobre la JVM, es ciudadano de primera en Spring Boot, y es una opción seria para backend. En esta guía vas a ver por qué.

Qué vamos a construir

Un servicio de pagos, payments, organizado con arquitectura hexagonal:

  • Recibe una orden de pago por una API REST.
  • Cobra a través de una pasarela de pago (un proveedor externo).
  • Guarda el pago en PostgreSQL.
  • Y al final le ponemos una interfaz web en Vaadin.
[ REST / Vaadin ] → payments (hexágono) → [ JPA → PostgreSQL ]
                                         → [ Feign ] → pasarela de pago

El truco que vas a comprobar con tus manos: cuando cambiemos de proveedor de pago, no vamos a tocar una sola línea del negocio. Ese es el corazón de la charla.

El problema que motiva todo esto

Un equipo venía de un monolito en PHP y migró a microservicios en Kotlin. Pero dentro de cada servicio copió la arquitectura en capas de siempre: el negocio terminaba conociendo el framework y a los proveedores. ¿Resultado? Cambiar una pasarela rompía la lógica, probar el negocio pedía levantar todo, y nadie encontraba la regla. La arquitectura hexagonal mueve el negocio al centro y deja afuera, como piezas reemplazables, todo lo técnico.

Cómo está organizada

Cada sesión es una etapa y, en el repo, una rama:

Sesión Rama Qué construye
0 (sin rama) El problema, los conceptos y los prerrequisitos
1 sesion-1 El proyecto con Spring Initializr y el dominio
2 sesion-2 Puertos, servicio y test sin Spring
3 sesion-3 Adaptadores REST, JPA y la pasarela por Feign
4 sesion-4 El momento "wow": cambiar de proveedor sin tocar el negocio
5 sesion-5 = main La interfaz en Vaadin

Para seguir a tu ritmo

Hacé git checkout sesion-1 y avanzá. Cada rama deja el proyecto justo en el estado de esa sesión. La rama main es la versión final.

Versiones

Kotlin 2.4 · Spring Boot 4.0.6 · Java 21 · Spring Cloud (OpenFeign) · PostgreSQL 17 · Vaadin 25.

Confirmá versiones en el asistente

En start.spring.io las versiones cambian con el tiempo. Si no ves Spring Boot 4.0.6, elegí la 4.x estable más cercana. El asistente se encarga de que las dependencias sean compatibles.

Cuando estés listo, arrancá por la Sesión 0.