
El framework corporativo sobre el framework open source
Imagina que estás en una empresa grande o en una corporación de muchos equipos y niveles, esta empresa tiene un área que gestiona y vela por los lineamientos de desarrollo y codificación. Para poder gobernar estos lineamientos, el equipo de líderes decide construir un framework corporativo que establece la línea base, directrices de dependencias entre capas, clases y/o componentes para diferentes casos de uso, así como clases y/o funciones utilitarias. El equipo no quiere reinventar la rueda y crea el nuevo framework sobre un framework open source popular y con gran comunidad de respaldo.
Como es normal en cualquier empresa, existen iniciativas de negocio que buscan hacerse realidad y que tienen equipos que no pueden esperar a que el framework corporativo esté terminado. Por lo tanto, nacen proyectos sin el framework corporativo porque negocio no puede esperar.
Pasado un largo tiempo, el área de desarrollo termina el framework corporativo para que las nuevas iniciativas de negocio puedan usarlo. Estas iniciativas y sus equipos se ven beneficiados por este nuevo framework corporativo en el mediano plazo. Como es normal, el framework open source sigue evolucionando en versiones, en características, y hay nuevas iniciativas de negocio y equipos que desean o necesitan aprovechar estas nuevas características; sin embargo, el lineamiento de usar el framework corporativo frena estas iniciativas, ahora se encuentran en el escenario de pedir una excepción o esperar a que el framework corporativo se ponga al día.
Por otro lado, existen iniciativas de negocio que por su naturaleza no pueden usar el framework corporativo porque necesitan usar otro lenguaje de programación u otras plataformas y servicios con los cuales no trabajaba el framework corporativo actual.
Los equipos de negocio logran pedir excepciones para poder sacar adelante sus iniciativas, asumiendo un compromiso de cumplir el lineamiento de usar el framework corporativo sin tener una fecha clara, pero además de que todo lo que están produciendo es catalogado como “deuda técnica”.
Tal vez esta situación te suene familiar, ya sea que como desarrollador la hayas vivido o incluso si la viste ocurrir de cerca porque estabas en un equipo de desarrollo o liderando una iniciativa de negocio.
Esta situación puede parecer caótica, pero las motivantes detrás de la decisión de un framework corporativo tienen sentido. Repasemos un poco:
- Gobierno de lineamientos de codificación para resguardar consistencia y seguridad de código.
- Gobierno de la arquitectura de aplicación: principios, capacidades, capas, estructura y dependencias.
- Fomentar la reutilización con componentes base.
Un framework corporativo puede cumplir con todas estas necesidades, pero en situaciones como la anteriormente descrita genera una percepción de bloqueo por la fuerte rigidez, el alto acoplamiento y la dependencia de un equipo central que muchas veces no tiene abasto o no se mueve con la agilidad que necesitan los demás equipos y sus iniciativas.
¿El framework corporativo es la única opción para poder cumplir con las necesidades descritas?
No es la única opción. De hecho, un conjunto de prácticas desde diferentes frentes representa una opción más flexible para poder cumplir con todas esas necesidades de gobierno.
Frente de desarrollo - Código
- Comprobadores de estilo de código: declaración de variables, nomenclatura de clases, entre otros.
- Analizadores de código: para hacer validaciones más complejas, como validar estructura, pertenencia a carpetas.
- Pruebas de arquitectura - AaaC: pruebas de validación de arquitectura, capas y dependencias entre paquetes.
- Implementación de librerías auxiliares, pero que no buscan ser un “framework”. Librería de propósito general con funciones comunes para la organización.
Frente de operaciones - CI/CD
- Analizadores y pruebas de arquitectura pueden verificarse durante la compilación en pipelines de CI.
- Durante el flujo CI también pueden desencadenarse analizadores tipo SonarLint para recopilar métricas de código.
Ejemplo de verificadores de estilo, analizadores de código y arquitectura de código para un proyecto .NET
Ahora presento un ejemplo práctico para una solución .NET. Esta solución cuenta con la siguiente estructura y ecosistema:
Proyecto Example.Abstractions. Representa una capa de dominio; acá se pueden encontrar clases de DTO, Request, Response e interfaces de repositorio.
Proyecto Example.Implementations. Representa la capa de lógica usando CQRS e implementaciones de repositorios.
Proyecto Example.TodoApi. Representa un proyecto de API ASP.NET con minimal API.
Proyecto Example.CustomAnalyzer. Es un proyecto para validar que los archivos de código “.cs” se creen dentro de un directorio válido.
Proyecto Example.NetArchTest. Proyecto para validar la arquitectura como código; valida que el proyecto de API no pueda referenciar directamente repositorios, clases base y DTOs, usando XUnit y NetArchTest.
Configuración global de solución con Directory.Build.props. Esto permite agregar analizadores de formato como “Roslynator” y también el “CustomAnalyzer” a todos los proyectos.
Configuración .editorconfig. Permite configurar reglas de nomenclatura y formato de código.
Para complementar, esta plantilla de solución puede ser verificada en pipelines de CI usando comandos como “dotnet build”, “dotnet test”, “dotnet format”, que harían que las pruebas de arquitectura y analizadores de código se gatillen. Si algo falla, el pipeline se abortaría hasta que el código sea corregido.
Para complementar con un mapa que permite visualizar las herramientas usadas tanto en desarrollo local y CI para gobernar el código:

Repositorio de código
Repositorio de ejemplo para gobernabilidad de código con .NET
Conclusión
Existen opciones más flexibles para poder gobernar el código y la arquitectura de aplicaciones que construir un framework corporativo; de esta manera, desde la estrategia se permite a los equipos y negocio utilizar ecosistemas de acuerdo con sus necesidades y no se les limita por cuestiones técnicas.
Sígueme en Linkedin para estar al tanto de mis publicaciones y novedades