Mi TFG: Concepto y Estrategia de Implementación

Mi TFG: Concepto y Estrategia de Implementación

📌 Nota: Actualmente, el sistema ya está funcional y desarrollado casi en su totalidad. El código y un video de su ejecución y funcionamiento se pueden consultar en el siguiente repositorio: github.com/TomasDarquier**LPMG


Introducción

Para finalizar mis estudios en la carrera de Licenciatura en Informática, como ultimo paso se encuentra el Trabajo Final de Grado (TFG). Un proyecto centrado en la documentación, diseño y desarrollo de un prototipo tecnológico, en mi caso y por elección propia, específicamente de una plataforma Low-Code de generación de código de microservicios.

Desde el principio, decidí plantear este proyecto como una iniciativa 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.

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

Es importante comenzar estableciendo un marco teórico básico. Una plataforma de desarrollo Low-code 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 del servicio y el Dockerfile correspondiente a la persistencia de cada uno de los componentes especificados.

La plataforma se basa en la premisa de que, con la llegada del paradigma de microservicios, son identificables ciertas 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.

A continuación, se presentan a modo de orientación, prototipos de las interfaces desarrolladas para guiar el frontend de la plataforma:

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 archivos Docker 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ía 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

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

De esta forma, puedo enviar y mover las especificaciones de la arquitectura creada por el usuario en el canvas a través de todo el backend, para que cada servicio extraiga la información que necesite sin necesidad de tener que establecer objetos comunes entre los microservicios que conforman la lógica de negocio de la plataforma.

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 y sencilla librería de Apache, llamada Velocity. Destaco su sencillez ya que realmente otorga facilidades al utilizarla con Java, al estilo Thymeleaf, simplemente se le agregan atributos/objetos a la plantilla y esta se renderiza accediendo a los getters y setters de los objetos recibidos.

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.

Conclusión

La decisión de plantear mi Trabajo Final de Grado como un motivo para explorar nuevos paradigmas y tecnologías puede ser una interesante manera de desafiar mis habilidades en áreas que hasta ahora no había podido 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 mas 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.