Módulos clave de un framework de desarrollo acelerado: herramientas para simplificar el trabajo del desarrollador
26 Abr 2022
Como ya anticipamos en un post previo sobre los módulos clave de un framework de desarrollo acelerado , los principales módulos de un framework de procesos se dividen en dos ámbitos. Por un lado, las herramientas para simplificar el trabajo del desarrollador (Tooling). Y, por otro, las implementaciones específicas que ayudan a mejorar las capacidades del framework base (Software) . En este artículo, de acuerdo a la estrategia que seguimos en el equipo de Mobile de VASS, describiremos con detalle un ejemplo de implementación donde se diferencian los dos módulos del área de tooling en forma de suite de herramientas. Con éstas proporcionaremos a nuestros equipos de desarrollo las capacidades clave que debe aportar un Framework de desarrollo acelerado.
Las herramientas o Tooling complementarán las capacidades del IDE y asistirán al desarrollador garantizando la correcta aplicación de la arquitectura. En este bloque encontraremos dos módulos diferentes: SETUP y TEMPLATES. Dichos módulos facilitarán la capacitación del equipo técnico para aplicar de manera estandarizada las mismas prácticas entre distintos aplicativos y equipos de trabajo, lo que contribuye disminuir los esfuerzos requeridos para la contextualización de los desarrolladores al colaborar en varios proyectos de manera simultánea.
Módulo SETUP. Proyecto base o Arquetipo para el framework de desarrollo
Este módulo proporciona un proyecto base con la configuración prestablecida desde el equipo de Arquitectura para la creación de nuevos proyectos. Éste debe de respetarse en todo momento. Con la creación del nuevo proyecto recibiremos la configuración de las dependencias correspondientes al Módulo CORE, Módulo de UI y Módulo de COMMONS. Del mismo modo, recibiremos la configuración base de cualquier otra librería certificada por el equipo de Arquitectura que forme parte de la solución.
Configuraciones que establece el proyecto base
En el proyecto base podremos encontrar también:
- Configuraciones específicas para la instanciación y uso de productos MBaaS.
- Parametrización específica para la generación de distintos tipos de binarios, globalización, compilaciones condicionales, etc.
- Parametrización relacionada con los entornos disponibles: INT, PRE, PRO…
- Configuraciones para la vinculación con las soluciones de:
- Monitorización: conocimiento del estado de salud la aplicación, detección de crashes en tiempo real, etc.
- Trazabilidad: detección de las versiones de los componentes utilizadas y retroalimentación de dicha información a Dashboards de control. Análisis de impacto ante modificaciones de componentes, etc.
- Analítica: uso y explotación de la aplicación que realizan los usuarios.
- Configuraciones para la realimentación del sistema de CI/CD.
- Configuraciones específicas/exclusiones para la validación de la calidad de código: Sonar, LINT, Detekt…
- Configuraciones/Exclusiones para acelerar la aplicación de soluciones de seguridad, encriptación de claves, ofuscación, gestión de certificados…
- Vinculación de soluciones particulares multilenguaje, como por ejemplo VASSLocalizer, para la gestión de cadenas síncrona entre los proyectos de Android y iOS.
El arquetipo también proporcionará la estructura de carpetas tipo del proyecto en su distribución mínima de UI, Domain y Data, y sus subcarpetas. Incluirá en su interior las interfaces y sus implementaciones necesarias, las clases base de arquitectura, su instanciación y vinculación correspondiente. Además, resolverá aspectos como la selección del patrón de diseño de capa de presentación elegido, la inyección de dependencias, el repositorio de datos en sus variantes de caché, la persistencia de datos locales y el acceso remoto a través de llamadas a servicios/APIs.
Importancia de la actualización del Proyecto Base al trabajar con Legacy
Es importante que se proporcionen mecanismos simples para la actualización del Proyecto Base de acuerdo con cómo lo realice el equipo de Arquitectura, para que las implementaciones legacy puedan adaptar el funcionamiento a las últimas especificaciones establecidas. Para ello, se versionará cada una de las implementaciones del Proyecto Base y se proporcionarán scripts para facilitar las transiciones hasta la última versión. También se proporcionará la documentación correspondiente para evaluar la magnitud de los cambios. Estas ejecuciones disminuirán el esfuerzo de resolver la deuda técnica procedente de la obsolescencia del código. Aun así, podrían quedar tareas manuales pendientes, por lo que tras cada actualización será necesario revisar y ejecutar al completo los tests de regresión del producto migrado.
En este, como en el resto de los módulos, deberán habilitarse canales en los que se especifique el listado de bugs conocidos y se permita a los consumidores del framework identificar nuevos issues o peticiones. Adicionalmente, tanto el Backlog inmediato como las iniciativas restantes del equipo de Arquitectura deberán de publicarse proporcionando visibilidad a los equipos consumidores.

En la imagen superior se proporcionan varios ejemplos de Proyecto Base.
Adicionalmente, se recomienda mantener la trazabilidad del uso de las distintas instancias activas y versiones del proyecto base para facilitar el análisis de impacto ante la aplicación medidas urgentes debidas a la posible detección de fallas de seguridad que afecten a algunas de estas versiones. De este modo podremos aplicar parches correctivos a las versiones afectadas que automatizarán las correcciones limitando dichos esfuerzos de mantenimiento y evitando a su vez que ninguno de nuestros proyectos se quede sin actualizar.
Plantillas para la creación de código autogenerado: Módulo TEMPLATES. IDE Booster
El uso de plantillas para la creación de código autogenerado alineado con la propuesta técnica de arquitectura de la aplicación puede ser una herramienta muy potente para minimizar la probabilidad de cometer errores de codificación. Además, las clases o ficheros de código necesarios se pueden crear (y deben crearse) de manera atendida (a golpe de clic directamente desde el IDE ), para inicializar:
- La interfaz gráfica de una nueva pantalla.
- Controladores para las pantallas creadas.
- Encapsulados de casos de uso específicos.
- Llamadas a APIs.
- Casos funcionales para resolver necesidades recurrentes.
Dichas plantillas, además de crear las respectivas clases, generarán las vinculaciones e instanciaciones necesarias entre ellas para que los desarrolladores no tengan que controlar estos aspectos manualmente, lo que evitará muchos de los errores humanos que solemos cometer al realizar estas acciones.

En la imagen superior, se puede observar cómo la plantilla permite identificar la funcionalidad a crear. También automatiza las clases necesarias definidas en la arquitectura, permitiendo seleccionar entre distintas subclases de partida y permitiendo instanciar el acceso al repositorio o DataManager.
Estos son los dos Módulos más importantes en el área de Tooling de un framework de desarrollo acelerado. En el próximo artículo desgranaremos la implementación de los módulos en el ámbito de Software: CORE, UI y COMMONS. ¡No te lo pierdas!