update readme

This commit is contained in:
Pedro Pérez 2025-10-10 04:53:27 +02:00
parent 7bc9f1c987
commit 6e89d5a8f5
2 changed files with 58 additions and 7 deletions

View File

@ -175,12 +175,6 @@ he optado por no incorporarlas.
Las pruebas más interesantes son las de reglas de negocio y validación, lo que
viene a ser los servicios y dominio.
## LLMS
He usado Claude para la toma de decisiones y ayuda con el _boilerplate_, que no
es poca cosa, además también se ha usado para la generación de las pruebas
unitarias, además de resolución de algunos problemas complejos.
## Generadores y otras librerías
Existen generadores de código para Golang, de hecho, se fomenta su desarrollo,
@ -210,4 +204,61 @@ sí, pero la prueba no consiste en eso.
También se ha planteado incorporar la librería _testify_, descartado porque para
comprobar si existe el error y algunas comparaciones no era necesario meter una
dependencia más.
dependencia más.
## Diagrama
![diagrama app](./assets/app-architecture.jpg)
El diagrama explica básicamente la estrucutra del proyecto en términos generales,
se demuestra que el dominio sensors solo se comunica al exterior mediante el
NATS y el _logger_.
Amarillo: exterior.
Morado: infraestructura.
Verde: dominio
Blanco: simulador, los _handlers_ está conectado sólo para llamar a la
gorutina, pero en la realidad debería ir independiente.
## Conclusión y cierre
Interesante reto donde realmente lo que más me ha costado son la realización
de pruebas unitarias, hay veces que me cuesta coger el concepto. Tengo la teoría
muy clara, pero a la hora de la verdad se me complica un poco las cosas. Además
que _mockear_ el sistema de mensajería debe tener su especial complejidad.
También ha sido algo complejo entender la concurrencia y los canales, no es algo
que haya trabajado en profundidad pero sí que se le ha puesto bastante empeño,
cariño y nivel de detalle.
He puesto mucho en valor la arquitectura limpia con un toque personal, no es DDD
puro ya que hay elementos que no deberían estar en dominio, pero en el proyecto
que estoy trabajando ahora mismo se está diseñando de la misma manera y está
funcionando muy bien.
También se ha evitado todo lo posible el uso de LLMs para la generación de
código, y su uso ha sido para la toma de decisiones arquitectónicas, discusión y
lectura rápida sobre los distintos funcionamientos de algunas librerías. En más
de una ocasión he cuestionado las respuestas que da, teniendo que verificar con
la documentación oficial. Pongo en valor mi capacidad para aprovechar la IA de
la mejor forma posible, verificando la información, además recalco que justo el
proyecto actual es una migración de un código en PHP completamente hecho con IA,
y se puede ver patrones y errores comunes que comete.
Soy consciente de que hay margen de mejora, por ejemplo con los tests o con la
documentación, se ha puesto especial esfuerzo y atención a que los nombres de
las funciones, variables, métodos, estructuras y paquetes sean lo más
autodescriptivos posibles. Se han puesto algunos comentarios. También hay
esfuerzo por permitir ejecutar el proyecto por primera vez con la mínima
intervención.
Un problema interesante que tuve que resolver, que como el sensor puede mandar
un valor ausente, el tipo `float64` al hacer el `unmarshal` se establece a 0.0,
con lo que se puede considerar válido, con lo cual su solución fue el uso de
puntero, si se descubre que es `nil` se considera no válido.
Digamos que este proyecto resuelve el problema que se propone, un sistema que
permite registrar y actualziar un sensor. Se puede ver su estado y los datos que
se recogen (simulados) se guardan en una base de datos.
Espero que el proyecto sea de vuestro agrado y podamos tener una siguiente
reunión.

BIN
assets/app-architecture.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 41 KiB