100 Days of Code - Días 21 a 30

  • Time to read 4 minutes
100 Days Of Code - Dias 21 a 30

Día 21 - 18/04/20

Finalmente puedo dar por terminadas las cuestiones relativas a la calidad del código fuente. A base de refactorización y diseño de tests unitarios, he podido obtener una calificación verde en SonarQube, con unas estadísticas realmente buenas

Soy consciente de que no debo obsesionarme con los semáforos de este tipo de aplicaciones. Una calificación verde no es sinónimo de buen diseño. Tampoco es sinónimo de que los tests unitarios desarrollados realmente sean eficaces. Pero me lo tomo como "una herramienta más a tener en cuenta".

Con respecto al código fuente, básicamente me he dedicado a refactorizar y desarrollar tests unitarios. Al final está quedando una aplicación bastante bien estructurada. Me he dado cuenta de la enorme necesidad de ceñirme a los principios SOLID de los que ya he hablado alguna vez. Especialmente el principio de Responsabilidad Única.

Día 22 - 19/04/20

Ya estoy en la recta final. Toca desarrollar los test unitarios necesarios para la capa de servicios del backend. Son un poco más complejos que los que he venido haciendo hasta ahora, porque debo controlar la lógica interna de los procedimientos "testeados" mediante el mockeo de las capas de repositorio y otros elementos. Ya me estoy acercando al final de esta fase. 

Día 23 - 21/04/20

He seguido desarrollando tests unitarios. Es más complejo de lo que pensaba, porque me obliga a pensar detenidamente qué respuestas espero de mis servicios y todas las posibles ramas de ejecución. Y todo esto antes de ver realmente el código. Dicho de otra forma, necesito tener muy claro qué es lo que espero de mi capa de servicios, y de cómo se tiene que comportar. Es una forma de enfrentarse a un desarrollo que me supone un verdadero reto, porque choca casi frontalmente con mi forma de hacer las cosas hasta este momento. Pero me gusta, y creo que lo voy a tomar como una nueva filosofía y un nuevo paradigma de desarrollo por defecto. El avance del proyecto es más lento (llevo 3 semanas dedicando 1 hora al día para un "tres en raya"). No obstante, ofrece un gran número de ventajas a medio y largo plazo, que compensan sin lugar a dudas esta ralentización en el inicio.

Día 24 - 23/04/20

Finalmente he desarrollado la capa de servicios. Al tener los tests unitarios bien definidos y las funcionalidades de capas inferiores correctamente agrupadas, al final ha consistido en unas pocas líneas de código. Todo ha funcionado perfectamente a la primera. O al menos los tests se han ejecutado correctamente. Ya únicamente me queda mi capa de controlador, y podré dar la funcionalidad básica del backend por finalizada.

Día 25 - 24/04/20

Hoy por fin he completado el desarrollo del backend del proyecto, implementando la capa de controlador. He refactorizado bastante código para usar modelos para la comunicación entre capas, en vez de usar sucesiones de parámetros. Nuevamente los tests unitarios han venido al rescate para asegurar que no se ha roto nada. Mañana empezaré con los tests funcionales del API, para comprobar que todo funciona efectivamente como se pretende que haga.

Día 26 - 25/04/20

He finalizado la primera versión funcional del backend del proyecto. Y por fin tengo mi primera versión "Master". Aún queda mucho por recorrer: control de errores, autentificación... pero al menos dispongo de algo a lo que llamar desde un frontend. He vuelto a comprobar la enorme utilidad del TDD. Tras poner el código del controlador, todo simplemente... funcionó. Sin más. Las piezas simplemente encajaron a la primera. Lo cual me tranquiliza y me da la confianza de que el backend es sólido y que una inmensa mayoría de posibles errores están bajo control.

A partir de ahora, iré diseñando el frontend e iré implementando los flujos de despliegue, como un trozo más del pastel del SDLC.

Día 27 - 26/04/20

Hoy ha sido un día de transición, en el que me he dedicado a instalar el software básico para el desarrollo: NodeJs, Ionic y Visual Studio Code. También he arrancado el proyecto mediante los comandos de inicialización que proporciona el propio CLI de Ionic. Se trata de un framework totalmente nuevo para mí, por lo que intuyo que me lo voy a pasar bien investigando. Mi punto fuerte es el backend, así que iré más lento en este inicio. Pero tengo bastantes días por delante aún. Iré combinando frontend con herramientas de integración y despliegue continuo, cosa que es nueva para mi también.

Día 28 - 29/04/20

He creado la estructura básica de componentes y módulos para la aplicación. Aunque he trabajado en varios proyectos con Angular, nunca antes había iniciado un proyecto desde cero, y me ha costado un poco hacer trabajar el mecanismo de lazy loading, módulos y enrutado. Pero por fin he conseguido compilar y arrancar el proyecto básico, las rutas son coherentes y el menú funciona correctamente.

Me ha resultado bastante complicado entender cómo funciona, especialmente por el hecho de que las rutas estaban funcionándome correctamente, pero no se estaba mostrando la información esperada en pantalla. Esto se ha debido a que aparentemente Ionic necesita renderizar la información mediante el uso de sus propios contenedores. Me he basado en los ejemplos y en el copia-pega, con la única intención de dejarlo funcionando. Pero seguiré investigando para entender el detalle de lo que ha pasado.

Día 29 - 30/04/20

He recuperado una Raspberry Pi que tenía para usar como servidor de desarrollo, y de integración/despliegue continuos. He instalado Jenkins y he empezado a pegarme con toda la documentación. Lo cierto es que se trata de un mundo nuevo para mi. Sí que he utilizado este tipo de herramientas desde el punto de vista de usuario, pero nunca he administrado ni he creado pipelines desde cero.

Tengo la sensación de que me va a llevar bastante tiempo instalar y configurar todas las herramientas involucradas en la integración y despliegue. He descubierto que para hacer las cosas bien, debo tener también un repositorio de artefactos. He estado barajando distintas posibilidades y creo que me voy a decantar por Nexus. Pero bueno, otra pieza más a descubrir y aprender.

Día 30 - 01/05/20

Hoy ha tocado recuperar el frontend. Estoy yendo muy poco a poco, me está costando especialmente lo relativo al CSS, dada la casuística especial que me encuentro de que los componentes tienen que ser totalmente responsive. Ya lo tengo todo prácticamente planteado, y me falta rematar la implementación de rejilla y celda.

Por el momento no estoy poniendo en práctica TDD (muy a mi pesar) principalmente porque se trata de un entorno prácticamente nuevo para mi. Prácticamente no he hecho nunca tests unitarios en frontend, y aunque la filosofía es la misma que la de los tests unitarios del backend, el uso de Jasmine y Karma implica ciertas particularidades a las que me tengo que acostumbrar Me estoy notando bastante verde con el desarrollo front, y espero que esto sea algo que se corrija en los próximos días. 

Listado de Commits en Github
Dia Commit
21 https://github.com/ramoncarrascom/BoringGames/commit/7d6b771
22 https://github.com/ramoncarrascom/BoringGames/commit/a0878d5
23 https://github.com/ramoncarrascom/BoringGames/commit/d8546a1
24 https://github.com/ramoncarrascom/BoringGames/commit/1eebce6
25 https://github.com/ramoncarrascom/BoringGames/commit/1f266ce
26 https://github.com/ramoncarrascom/BoringGames/commit/ffa30e9
27 https://github.com/ramoncarrascom/BoringGames/commit/ef8372c
28 https://github.com/ramoncarrascom/BoringGames/commit/1563d49
30 https://github.com/ramoncarrascom/BoringGames/commit/87104e1