Pequeño taller de Domain Driven Design (DDD) en castellano (español) codificado en Scala 3.
El objetivo de este taller es enseñar los conceptos básicos del Diseño Dirigido al Dominio (DDD). Estos conceptos ayudan a los ingenieros a guiar a los asistentes de Inteligencia Artificial a generar mejor código.
El taller se divide en tres partes:
- Prueba de concepto: pedirle a la IA que genere código con base en los requisitos de técnicos sin más contexto.
- Minimum Viable Product: pedirle a la IA que genere el mismo código con el contexto adicional de negocio y utilizando los principios del DDD.
- Refined: pedirle a la IA que genere el mismo código con los fuertes guardarrailes de Scala 3, ayudándonos de metaprogramación y la librería
Iron.
Sigue SETUP.md para tener la mejor experiencia trabajando con este taller.
git checkout poc-taskExperimenta con tu asistente de IA para crear una solución al validador de IDs.
git checkout mvp-taskCrea un artefacto que cumple todos los requisitos técnicos y de negocio. Apóyate en la IA para crear una solución robusta que pase en verde todos los tests.
La solución disponible está implementada utilizando union type y pattern matching, presentes en muchos lenguajes de programación.
git checkout mvp-resolvedgit checkout refined-taskExplora las nuevas funcionalidades de Scala 3:
- Metaprogramación accesible con
inline(Metaprogramming - Inline) - Operaciones en tiempo de compilación como
constValue[A]oToString[A](Metaprogramming Compile-time operations) - Tipos refinados utilizando la librería Iron
La solución está implementada de forma concisa para respetar los requisitos de negocio y técnicos. Utiliza estructuras for-yield que representan cadenas de flatMap y map, conceptos centrales de la programación funcional.
checkout refined-resolvedPara poder ejecutar el proyecto, te recomiendo abrir dos terminales y ejecutar en cada una de ellas el front end y el
back end respectivamente. Si usas DevBox, recuerda iniciarlo en las dos terminales.
NOTA: mill solo se ejecuta en un hilo, por lo que tienes que lanzar primero el front end antes del back end.
Antes de iniciar el front end hay que compilar el código a JavaScript. Para ello ejecutamos:
mill frontend.compilemill frontend.fastLinkJSActo seguido, entramos en la carpeta /frontend
cd frontendUna vez allí, necesitamos instalar los módulos con yarn:
yarn installY finalmente lanzamos la página web con:
yarn startServido en: http://localhost:1234/
En una nueva consola, compilamos el código y ejecutamos la clase principal:
mill backend.compilemill backend.runServido en: http://localhost:8080/
Si te ha gustado este taller, márcalo con una estrella, compártelo...
Puedes añadir tus propias implementaciones del back end o mejorar el front end forkeando el proyecto y abriéndo una pull request.