MIM AA: Nueva arquitectura modular para aplicaciones

Fuentes: Simplify your Application Architecture with Modular Design and MIM | CodingFox

Este artículo presenta MIM AA (Arquitectura de Infraestructura-Módulo y Aplicación de Módulo), una arquitectura de aplicación flexible y adaptable que se aleja de las estructuras rígidas como Clean Architecture, Hexagonal Architecture o Onion Architecture. En su lugar, se basa en principios de Diseño Modular de Software, dividiendo la aplicación en módulos independientes que encapsulan lógica de negocio específica. La clave de MIM AA es la introducción de 'Infrastructure-Modules' (Infra-Módulos) que albergan el código relacionado con la infraestructura (bases de datos, APIs, sistemas de archivos, etc.) y son dependientes de los 'Business-Modules' (Módulos de Negocio), pero estos últimos no dependen de los Infra-Módulos. Esto promueve una alta cohesión, bajo acoplamiento, ocultamiento de información, separación de preocupaciones, y facilita la testabilidad, incluso con técnicas avanzadas como Test-Driven Development.

En esencia, MIM AA busca reducir la carga cognitiva al simplificar la estructura de la aplicación. Un módulo bien definido actúa como una 'caja negra' con una API pública clara, ocultando su implementación interna. Los Infra-Módulos implementan interfaces definidas por los Business-Modules, permitiendo la inyección de dependencias y la sustitución de implementaciones (por ejemplo, cambiar de una base de datos a otra) sin afectar la lógica de negocio. Esto permite un alto grado de flexibilidad y mantenibilidad. El autor enfatiza que esta arquitectura no es revolucionaria, sino una síntesis y refinamiento de patrones existentes, y que su objetivo es llenar un vacío en la documentación sobre el diseño de aplicaciones a un nivel intermedio entre el diseño de alto nivel (arquitectura del sistema) y el diseño de bajo nivel (patrones y clases).

MIM AA es aplicable a una amplia gama de escenarios, desde microservicios y monolitos hasta aplicaciones de consola y diseño impulsado por dominio (DDD). La arquitectura se centra en la organización del código alrededor de procesos de negocio, en lugar de capas, lo que facilita la comprensión y el mantenimiento. La separación de la lógica de negocio de la infraestructura permite una mejor testabilidad y una mayor capacidad de adaptación a los cambios en los requisitos o la tecnología.