Del Monolito al Monolito Modular

symfony_arquitectura.jpg
Solucionex
21
Oct 22

Un framework es esa navaja suiza que nos permite tener un conjunto de herramientas con las que desarrollar nuestros proyectos de una manera cómoda y rápida, pero también a veces demasiado atada a su propia visión de temas como arquitectura, buenas prácticas y demás convenciones, es el caso de lo que se conoce como "opinionated frameworks". En el ecosistema PHP los dos más grandes frameworks que siguen esta corriente son Laravel y Symfony.

2001: Una odisea del espacio", 50 años del estreno de la epopeya metafísica  de Stanley Kubrick - Infobae

Estos dos nombres son también representantes del patrón de arquitectura más usado en los frameworks de desarrollo web desde finales de los 2000, el monolito MVC. A partir de entonces y con el surgimiento en la industria de empresas con grandes proyectos que tienen necesidades de escalabilidad, elasticidad, disponibilidad... se han puesto en vanguardia nuevas arquitecturas y patrones.

🧐 Las buenas maneras

Ya queda en la lejanía aquellos momentos en los que PHP era un lenguaje joven con muchas lagunas y fuente de mucho código de no muy buena calidad, pero eso es historia. A partir de su versión 7, el lenguaje optó por un cambio de rumbo, empezó a aplicar patrones y estructuras destinados a tener un código de mucha mayor calidad.

¿Pero cuánta responsabilidad es del código y cuánta del uso que hace del mismo un desarrollador? Es aquí donde entra en juego el buen uso del lenguaje, los principios S.O.L.I.D y los patrones de diseño, pasando a utilizar nuestro framework como algo "gestionable" en vez de una dependencia que nos marque el curso del desarrollo.

🧹 Poniendo orden en casa 

Pasar desde lo que nos da un framework por defecto a plantear una arquitectura avanzada puede parecer un salto al abismo, pero existen opciones "intermedias" que nos pueden hacer esta evolución mucho más entendible y abordable, es el caso del Monolito Modular.

El Monolito Modular plasma la arquitectura de Microservicios dentro de un Monolito simple, evitando tener todo nuestro código en una estructura de carpetas única bajo un directorio "src". Esto lo conseguimos creando módulos (carpetas) con toda la lógica relacionada con nuestros casos de uso (entidades), esto es, en cuanto a estructura cada uno de nuestros módulos tendrán sus propios Controladores, Enrutado, Entidades, Repositorios, Servicios, Eventos, etc. y en cuanto a infraestructura los configuraremos para que cada módulo tenga su propia configuración de Servicios, Enrutado, ORM...

Para aprender más sobre el Monolito Modular disponéis de un magnífico tutorial por Codenip de cómo empezar un proyecto Symfony aplicando esta arquitectura.