Entonces, hablemos de la comunicación directa entre microfrontends. Este es un problema muy general en la ingeniería de software. Tenemos estas diferentes unidades que son independientes entre sí. No queremos que estén acopladas entre sí, pero aún tienen que pasar mensajes entre sí porque son parte de un equipo más grande.
Entonces, si echamos un vistazo a lo que estamos haciendo en el diseño de software de backend, generalmente se trata de microservicios y micro frontend y los microservicios tienen alguna correlación entre ellos. Esa es una oportunidad para aprender mucho sobre microfrontends. Entonces, si echamos un vistazo a cómo se comunican los microservicios, uno de los patterns más populares y poderosos es el mecanismo de suscripción pública, mensajería asíncrona. Cada microservicio puede publicar información, cosas interesantes que suceden dentro del microservicio en algún espacio compartido, como un bus de mensajes, y cualquier otro microservicio podría consumir esta información en caso de que sea realmente interesante. Entonces, esto hace que los microservicios aún se desacoplen entre sí de alguna manera, pero aún permite una comunicación muy agradable y muy poderosa. Entonces, podríamos derivar de eso una solución para nuestros microfrontends, ¿verdad? Podríamos usar el objeto window, que es un gran espacio común con el que cada microfrontend puede comunicarse. Y cada microfrontend podría publicar eventos interesantes sobre cosas que suceden, como un producto que se seleccionó para la tarjeta, y cualquier otro microfrontend podría consumir esta información. Entonces, diferentes microfrontends no son conscientes el uno del otro, pero aún pueden pasar información importada. Entonces, eso se puede implementar muy fácilmente e incluso de forma nativa usando eventos personalizados. Podemos crear eventos personalizados y enviarlos a la ventana, y podemos agregar oyentes de eventos a la ventana para recuperar esta información. Entonces, podrías envolver ese mecanismo con tu marco React o Vue y construir algo más advanced que pueda ayudarte a automatizar parte de esta comunicación o hacerla más robusta.
Ahora, eso estuvo bien, pero a veces, simplemente tienes que tener un estado. Entonces, comunicarse con el evento es genial, pero hay algunas operaciones complejas o algunos constructos complejos de data que queríamos tener compartidos o algún tipo de estados como un estado de Redux para gestionar el proceso, y eso puede suceder bastante a menudo. Entonces, lo que querríamos es esto una tienda Redux centralizada y cada microfrontend podría comunicarse con para mantener estos tipos de estados complejos. Y esto es muy problemático, especialmente cuando hablamos de microfrontends, porque esto rompe completamente las aislaciones que tienen entre sí, especialmente que son propiedad de diferentes equipos. Entonces, si el producto, microfrontend manipula el estado de alguna manera, entonces el microfrontend de entrega y el microfrontend de soporte tendrían que adaptarse o entender el cambio y eso puede volverse muy difícil. Entonces, lo que realmente queríamos son estas tiendas agradables y alineadas. Tenemos una tienda por microfrontend. Cada microfrontend puede usar esa tienda como una tienda Redux, y estas tiendas están desacopladas entre sí. Pero, por supuesto, aquí no tenemos ninguna comunicación entre ellos y eso también es problemático. Entonces, otra solución que he visto para mantener un estado entre microfrontends de una manera que aún los mantiene bastante desacoplados es permitir que los microfrontends se suscriban o vean las tiendas de otros microfrontends, pero sin la capacidad de mutar estas tiendas. Entonces, en este ejemplo, el microfrontend de soporte puede realmente, el microfrontend de producto, los microfrontends de entrega pueden ver la tienda del microfrontend de soporte, pero aún hay algún problema, hay algunos problemas aquí, porque cualquier cambio en cómo se implementa la tienda de soporte afectaría a los microfrontends de entrega y producto. Entonces, lo que podemos hacer para hacerlo aún más seguro es llegar a esta tienda global. Esta tienda global gestiona las diferentes tiendas de los diferentes microfrontends, cada microfrontend puede suscribirse a la tienda, tiene su propia tienda que puede manipular, y otros microfrontends pueden consumir y suscribirse a sus propias tiendas u otras tiendas. Debido a que esta tienda global expondría una API específica, entonces cada microfrontend solo tendría que implementar esa API específica y eso hará que todo sea mucho más fácil eso alineará esta API en esos diferentes microfrontends.
Bueno, entonces eso fue como una visión general de tres formas comunes de mantener la comunicación entre microfrontends mientras los mantiene bastante aislados entre sí. Entonces, me gustaría resumir la charla y lo primero que decimos es que debemos esforzarnos hacia equipos altamente autónomos, deberíamos estructurar equipos en alineación con los negocios subdominios y eso no se relaciona directamente con microfrontends, definitivamente puedes tener un monolito que está alineado con un aspecto empresarial. Aunque la aplicación de la arquitectura de microfrontend podría mejorar esta idea segregando las preocupaciones comerciales de una mejor manera. Y al aplicar DTD estratégico podemos identificar subdominios, modelarlos en contextos delimitados y aplicar el mapeo de contexto para encontrar relaciones entre ellos. Y también decimos que el microfrontend es una implementación técnica del contexto delimitado. Entonces, el mapeo de contexto puede ayudarnos a identificar los puntos, los puntos de contacto donde el microfrontend debería comunicarse. Y una regla importante es que la comunicación entre microfrontends debería mantenerlos aislados entre sí. Entonces, eso es un resumen de la charla. Espero haber dado algo de inspiration sobre cómo aplicar DDD en problemas que encontramos en el frontend, y cómo facilitar la comunicación entre microfrontends de una manera que te ayudará a alcanzar metas como la autonomía del equipo. Muchas gracias.
Comments