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