Mi TFG: Concepto y Estrategia de Implementación

Mi TFG: Concepto y Estrategia de Implementación

Desde el principio, decidí que este proyecto debía ser un desafío, algo que me obligara a salir de mi zona de confort. En este primer artículo, te voy a contar de qué se trata conceptualmente y de qué tecnologías me voy a apoyar para hacerlo realidad.

Mi TFG en Github

¿Que es una plataforma Low-Code y por qué decidí desarrollar una?

Una plataforma de desarrollo Low-code (LCDP) se trata de un software que, mediante una interfaz gráfica o plataforma interactiva, permite desarrollar código y configuraciones, reemplazando la programación tradicional y la considerable complejidad y carga temporal que esta implica.

El proceso de desarrollo de este tipo de plataformas requiere un conocimiento profundo en el campo donde se busca implementar, obligando a quien lo desarrolla a conocer los principios de ingeniería de software necesarios, además de los requerimientos comunes de los usuarios, para lograr un producto final con un perfecto balance entre flexibilidad y simpleza (Mendelson D. 2020).

Esto justifica la elección del proyecto de mi TFG. Para realizar de forma correcta lo planeado, necesito ahondar en los conceptos que me llaman mucho la atención, como lo son los referidos a las arquitecturas distribuidas, sus patrones de diseño, optimizaciones, buenas practicas y usos frecuentes. Además de adentrarme en un campo totalmente desconocido para mí, como lo es la generación automática de código y su especificación semántica.

¿Cómo funcionará la plataforma?

El proyecto a desarrollar constará de una plataforma Web donde, mediante un sistema interactivo Drag and Drop, el usuario podrá modelar una arquitectura de microservicios, para finalmente descargar el código Java y Dockerfile de cada uno de los componentes especificados.

La plataforma se basa en la premisa de que, con la llegada del paradigma de microservicios, se identificaron similitudes entre los componentes de arquitecturas con propósitos distintos. Por ejemplo, microservicios como autenticación, registro de actividades y configuración son omnipresentes en diversas arquitecturas debido a su rol esencial en la seguridad, observabilidad y gestión de sistemas distribuidos (Richardson, 2019).

De esta manera, el usuario podrá crear y configurar un componente, un conjunto de componentes o una arquitectura completa de microservicios mediante la interfaz gráfica.

Es importante aclarar que un microservicio no se limita solo a su código. Generalmente, un microservicio incluye una base de datos, a veces un caché, una cola para comunicación asíncrona, etc. Por lo tanto, la plataforma deberá generar también estos componentes mediante la creación dinámica de Dockerfiles y configuraciones.

La viabilidad de la plataforma se debe a los beneficios que ofrecen las arquitecturas de microservicios en términos de modularidad y encapsulamiento de código. Por ejemplo, un usuario podrá especificar y descargar un componente de "Notificaciones" desde la plataforma e integrarlo fácilmente en su arquitectura existente.

Tecnologías para el Desarrollo ¿Qué rol clave esconde cada una?

En cuanto a la implementación de la propia plataforma Drag and Drop, no habrán muchas cosas fuera de lo usual en lo referido al desarrollo y elección de sus componentes, por lo que sus características principales se pueden resumir en:

  • Arquitectura de Microservicios REST vía Spring

  • Autenticación via OAuth2

  • React para solventar la complejidad del Front-end

  • PostgreSQL como DBMS

  • Docker y Kubernetes para la contenerización y orquestación de los componentes

Lo realmente interesante se encuentra en la especificación semántica de la arquitectura creada por el usuario y en la generación automática de código. Estos aspectos son fundamentales para asegurar que los microservicios puedan combinarse de múltiples maneras, generando código que responda a las conexiones y servicios especificados por el usuario.

Especificación Semántica

Una vez que el usuario especifique la configuración, relaciones y componentes de la arquitectura mediante el Front-end, es crucial describir de manera flexible las relaciones y dependencias entre los microservicios para que se generen combinaciones válidas y funcionales. Para esta tarea, utilizaré RDF (Resource Description Framework).

Resource Description Framework o RDF se trata de un estándar para describir información en la web de manera estructurada, utilizando sujeto, predicado y objeto para representar datos y relaciones.

Para obtener más información sobre su funcionamiento, los invito a consultar el siguiente blog post: [artículo en construcción...]

Generación Automática de Código

Para la generación de código de forma dinámica, voy a hacer uso de una potente librería de Apache, llamada Velocity.

En resumen, Apache Velocity es un motor de plantillas de código abierto, que mediante variables, propiedades y métodos, permite la creación de documentos basados en texto a partir de datos dinámicos.

El uso de esta herramienta concentra su importancia en que, debido a la generación dinámica de código, cada componente resultante tendrá un código limpio y presente unicamente para las tareas y relaciones que indicó el usuario, evitando configuraciones innecesarias y mermas en el rendimiento.

Para obtener más información sobre su funcionamiento, los invito a consultar el siguiente blog post: [artículo en construcción...]

Conclusión

La decisión de plantear mi Trabajo Final de Grado como un motivo para explorar nuevos paradigmas y tecnologías puede ser un interesante medio para desafiar mis habilidades en áreas que hasta ahora no había tenido la oportunidad de explorar en profundidad. Este proyecto, además de ser una culminación de mis estudios, también es una oportunidad para experimentar con enfoques ciertamente innovadores y resolver problemas complejos.

Con tecnologías como Spring, React, Docker, y herramientas como RDF y Apache Velocity, la plataforma generará código Java y sus respectivas dependencias mediante un entorno verdaderamente flexible y adaptable para la construcción de microservicios. De esta forma el usuario va a disponer de una herramienta que le permita llevar a cabo sus ideas con una libertad y personalización destacable, garantizando que cada configuración resulte en un producto final robusto y alineado a sus necesidades.