Compartir es Cuidar: ¿Deberían los Micro Frontends Compartir Estado?

Rate this content
Bookmark

La arquitectura de micro frontends es extremadamente poderosa cuando se trata de dividir grandes monolitos frontends en bloques más pequeños y desplegables de forma individual, cada uno propiedad de un equipo autónomo y enfocado en un dominio empresarial. Pero, ¿qué pasa con el Estado? A menudo se nos dice que los micro frontends no deben compartir estado, ya que esto los acoplaría entre sí. Sin embargo, cuando se trata de interfaces de usuario complejas, no es raro encontrarse con escenarios donde es necesario gestionar el estado entre micro frontends. Esta charla trata sobre encontrar el punto óptimo: ¿En qué escenarios es razonable que los micro frontends compartan estado? ¿Y cómo deberían compartir estado los micro frontends manteniéndose desacoplados entre sí? Discutimos y comparamos diferentes soluciones en React.

FAQ

Los micro-frontends son una técnica de desarrollo que divide un monolito de frontend en piezas más pequeñas y manejables, permitiendo que los equipos de desarrollo trabajen de manera más autónoma y eficiente.

Una forma es utilizando un backend común para manejar el estado, donde un micro-frontend puede enviar información al backend y otro puede consumirla. Otra forma es usando eventos personalizados o suscripción pública a través de un bus de mensajes, lo que permite la comunicación sin acoplamiento directo.

Un contexto acotado es una entidad lógica dentro del diseño impulsado por el dominio (DDD) que encapsula ciertas funcionalidades y datos. Cada micro-frontend puede ser una implementación técnica de un contexto acotado, simplificando la implementación y mejorando la comunicación.

Al alinear los micro-frontends con los subdominios comerciales, se optimiza la gestión y desarrollo de características, ya que cada equipo puede enfocarse en un aspecto específico del negocio con mayor autonomía y menos dependencias.

El mapeo de contexto es una herramienta del diseño impulsado por el dominio que ayuda a entender y planificar las interacciones entre diferentes contextos acotados. Facilita la definición de cómo deben comunicarse los micro-frontends entre sí, manteniendo su independencia y coherencia.

Aplicar DDD estratégico permite una descomposición efectiva del dominio en subdominios que maximiza la autonomía y eficiencia de los micro-frontends, facilitando la comunicación y colaboración entre equipos, y asegurando que el diseño del software refleje fielmente las necesidades del negocio.

La ley de Conway sugiere que los sistemas de software tienden a reflejar la estructura de las organizaciones que los desarrollan. En el contexto de los micro-frontends, esto significa que una organización bien estructurada puede resultar en un sistema de micro-frontends más cohesivo y eficiente.

Eliran Natan
Eliran Natan
23 min
21 Jun, 2022

Comments

Sign in or register to post your comment.

Video Summary and Transcription

Los micro frontends permiten que los equipos de desarrollo trabajen de forma autónoma y con menos fricciones y limitaciones. Organizar los equipos en torno a preocupaciones empresariales, en línea con los subdominios, en lugar de preocupaciones técnicas, puede llevar a un software bien dividido y a historias de usuario bajo la responsabilidad de un solo equipo. Tener un respaldo o punto de referencia lógico es importante para implementar micro frontends sin romper su aislamiento. Los micro frontends pueden comunicarse entre sí utilizando el objeto window y eventos personalizados. Los micro frontends deben mantenerse aislados mientras mantienen la comunicación a través de diversos enfoques.

1. Introducción a los Micro-frontends

Short description:

Los Micro-frontends permiten que los equipos de desarrollo trabajen de manera autónoma y con menos fricciones y limitaciones. Exploraremos una perspectiva orientada al dominio para comprender la comunicación entre los micro-frontends. Resolver las historias de usuario debería ser una tarea de extremo a extremo de un solo equipo, en lugar de ser compartida entre varios equipos. Las historias de usuario se organizan según los subdominios.

Hola a todos. Mi nombre es Eliran Atan. Esta es mi segunda vez en React Summit, pero aún estoy muy emocionado. He estado construyendo sistemas escalables durante la última década, y hoy quiero centrarme en los micro-frontends, y especialmente en el intercambio de estado de los micro-frontends.

Entonces, los micro-frontends se tratan de dividir este monolito de frontend en piezas más pequeñas y manejables que permiten que los equipos de desarrollo trabajen de manera más eficiente y efectiva. Esto se debe a que los micro-frontends suelen estar aislados entre sí. Permiten que los equipos de desarrollo trabajen de manera autónoma y con menos fricciones y limitaciones.

Un problema común que surge cuando hablamos de micro-frontends es si deben compartir estado o comunicarse de alguna manera. Si es así, ¿cómo deberíamos hacerlo sin romper su aislamiento entre sí? En esta charla veremos un enfoque diferente para pensar en los micro-frontends. Vamos a abordar eso desde una perspectiva orientada al dominio. Veremos cómo podemos representar un micro-frontend utilizando algo que llamamos un contexto acotado. El contexto acotado es esta entidad lógica que refleja nuestra implementación y puede derivar la implementación. Y veremos cómo eso puede ayudarnos a comprender la comunicación entre los micro-frontends.

Entonces, empecemos desde otro ángulo. Hablemos de Agile. En Agile, a menudo trabajamos con historias de usuario. Las historias de usuario son esta breve descripción de un objetivo final que el usuario desea lograr, ¿verdad? Y siempre se describe desde la perspectiva del usuario y en términos de el negocio. Por lo general, en muchas organizaciones, resolver una historia de usuario implicará la cooperación y coordinación de equipos de múltiples capas. Y eso se debe a que el código afectado para resolver esa historia a menudo se comparte entre estos equipos. Y eso se debe a cómo las organizaciones tienden a estructurar los equipos, especialmente cuando hablamos de front-end. A menudo vemos esta división arbitraria de responsabilidades entre equipos. A veces se trata de ser dueño de componentes o páginas o vistas. Pero eso no es realmente cómo se organizan las historias de usuario. Lo que realmente queremos es alguna forma de organizar nuestros equipos y código de manera que resolver una historia de usuario sea una tarea de extremo a extremo de un solo equipo. Eso significa que el código afectado para resolver esa historia pertenecería a un solo equipo determinado. Eso hará que el flujo sea mucho mejor, especialmente a gran escala. Una pregunta que debemos hacernos es cómo se organizan las historias de usuario. Desde una perspectiva orientada al dominio, las historias de usuario se organizan según los subdominios. Si tomamos una aplicación de e-commerce estándar, ese es el dominio más simple que podemos pensar, entonces una división normal en subdominios sería algo como catálogo, pedido, entrega, soporte y tal vez algunos otros subdominios. El subdominio del catálogo se ocupa de permitir a los usuarios navegar y buscar productos, mientras que los otros subdominios se ocupan de que los usuarios agreguen productos a

2. Implementación y Comunicación de Microfrontends

Short description:

Organizar equipos en torno a preocupaciones comerciales, alineados con subdominios en lugar de preocupaciones técnicas, puede llevar a un software dividido de manera ordenada y a historias de usuario bajo la responsabilidad de un solo equipo. Los microfrontends mejoran la segregación entre subdominios y brindan autonomía a los equipos sobre la pila tecnológica. El diseño impulsado por el dominio, específicamente el DDD estratégico, ayuda a descomponer el dominio en subdominios. Cada contexto acotado deriva una implementación de un microfrontend, simplificando la implementación y mejorando la comunicación. La herramienta de mapeo de contexto ayuda a comprender las relaciones entre diferentes contextos y permite una comunicación efectiva entre los microfrontends.

subtarjetas y solicitar la entrega. Lo que podemos hacer es organizar los equipos según las preocupaciones comerciales, alineados con los subdominios en lugar de las preocupaciones técnicas como componentes, páginas o vistas, y así sucesivamente. Junto con la ley de Conway, que establece que las organizaciones tienden a reflejar su propia estructura en el software que construyen, es muy probable que obtengamos un software dividido de manera ordenada y que las historias de usuario probablemente caigan bajo la responsabilidad de un solo equipo.

Ahora, esto se puede llevar más lejos, y aquí es donde hablamos nuevamente de los microfrontends. Al dividir este monolito en diferentes microfrontends, mejoraremos la segregación entre subdominios y daremos a los equipos otro nivel de autonomía en el nivel de la pila tecnológica, ya que ahora pueden elegir sus propias herramientas y patrones de diseño, por ejemplo. Cada equipo puede optimizar los patrones de diseño que utiliza para los objetivos específicos que desea lograr.

Entonces, mi punto aquí es que una base sólida para los microfrontends es considerar la alineación con los aspectos comerciales. Es por eso que cuando hablamos de microfrontends, debemos pensar en el diseño impulsado por el dominio, específicamente en el DDD estratégico. El DDD estratégico es esta herramienta que nos permite descomponer correctamente nuestro dominio en varios subdominios de una manera que maximice el potencial que tiene el microfrontend. El DDD realmente nos dice que debemos reunir a nuestros expertos en el dominio para tomar el tiempo y hacer una lluvia de ideas junto con otras partes interesadas para formar este lenguaje inequívoco que realmente capture las entidades y procesos naturales que ocurren dentro de este subdominio. Y esta forma de lenguaje forma un límite lógico que llamamos contexto acotado. El contexto acotado tiene mucho que ofrecer, muchos beneficios para trabajar con el contexto acotado y derivar de él la implementación real del microfrontend. Entonces, cada contexto acotado derivará una implementación de un cierto microfrontend. Podríamos resumir eso diciendo que un microfrontend es una implementación técnica de un contexto acotado. Por lo tanto, tener un contexto acotado que deriva microfrontends tiene numerosos beneficios. El contexto acotado puede simplificar drásticamente la implementación de cada microfrontend porque cada término en cada contexto acotado se describe desde la perspectiva de ese contexto acotado. Por lo tanto, no tienes mucha información redundante que debas manejar. Solo manejas las cosas relevantes dentro de ese contexto. Y hay un beneficio más profundo en eso. Y ahora tenemos esto en cada contexto, tenemos un lenguaje cohesivo inequívoco que todos entienden. Y eso mejora mucho la comunicación. Y eso hace que traducir las historias de usuario sea mucho más fácil, y así sucesivamente.

Pero quiero centrarme en otro beneficio que se relaciona con cómo debe comunicarse un microfrontend. Tenemos otra herramienta que forma parte del kit de herramientas del DDD, que es la herramienta de mapeo de contexto. El mapeo de contexto se trata de comprender, hacer una lluvia de ideas y comprender las relaciones entre diferentes contextos. Por ejemplo, aunque el término `producto` generalmente significa otra cosa cuando hablamos del contexto del catálogo, por ejemplo, una estructura que muestra todos los comentarios, reseñas, detalles del producto, imágenes del producto, y así sucesivamente, eso significa que `producto` significará otra cosa en el contexto del pedido. Probablemente tendrá algún identificador, precio, descuentos o todo lo que se relacione con el pedido. Pero aún así, aunque estén definidos de manera diferente en esos diferentes contextos, aún tienen esta conexión lógica entre ellos, ¿verdad? Porque queremos permitir a los usuarios agregar productos que encuentren en el catálogo a algún carrito que es naturalmente parte del contexto del pedido. Y eso realmente genera una comunicación que debemos tener entre el frontend del catálogo y el frontend del pedido, ¿verdad? Esos fragmentos de información, un producto seleccionado, deben comunicarse entre estos microfrontends. Entonces, aquí vemos una forma de comprender lógicamente cuáles son las conexiones que debemos hacer entre los contextos, y luego derivar a partir de ahí la comunicación entre la implementación, entre los microfrontends reales. Y eso puede ayudarnos a evitar comunicaciones innecesarias, y también puede ayudarnos a comprender si nuestro modelo es correcto, si no estamos creando demasiado

Check out more articles and videos

We constantly think of articles and videos that might spark Git people interest / skill us up or help building a stellar career

No resuelvas problemas, elimínalos
React Advanced Conference 2021React Advanced Conference 2021
39 min
No resuelvas problemas, elimínalos
Top Content
Los humanos son solucionadores de problemas naturales y somos lo suficientemente buenos en eso que hemos sobrevivido a lo largo de los siglos y nos hemos convertido en la especie dominante del planeta. Debido a que somos tan buenos en eso, a veces también nos convertimos en buscadores de problemas, buscando problemas que podemos resolver. Aquellos que logran sus objetivos de la manera más exitosa son los eliminadores de problemas. Hablemos de la distinción entre resolver y eliminar problemas con ejemplos de dentro y fuera del mundo de la codificación.
Escalando con Remix y Micro Frontends
Remix Conf Europe 2022Remix Conf Europe 2022
23 min
Escalando con Remix y Micro Frontends
Top Content
¿Tienes un producto grande construido por muchos equipos? ¿Estás luchando para lanzar a menudo? ¿Se convirtió tu frontend en un monolito inmantenible masivo? Si, como yo, has respondido sí a cualquiera de esas preguntas, ¡esta charla es para ti! Te mostraré exactamente cómo puedes construir una arquitectura de micro frontend con Remix para resolver esos desafíos.
Uso efectivo de useEffect
React Advanced Conference 2022React Advanced Conference 2022
30 min
Uso efectivo de useEffect
Top Content
¿Puede useEffect afectar negativamente a tu base de código? Desde la obtención de datos hasta la lucha con las APIs imperativas, los efectos secundarios son una de las mayores fuentes de frustración en el desarrollo de aplicaciones web. Y seamos honestos, poner todo en ganchos useEffect no ayuda mucho. En esta charla, desmitificaremos el gancho useEffect y obtendremos una mejor comprensión de cuándo (y cuándo no) usarlo, así como descubriremos cómo los efectos declarativos pueden hacer que la gestión de efectos sea más mantenible incluso en las aplicaciones React más complejas.
Sistemas de Diseño: Caminando la Línea Entre Flexibilidad y Consistencia
React Advanced Conference 2021React Advanced Conference 2021
47 min
Sistemas de Diseño: Caminando la Línea Entre Flexibilidad y Consistencia
Top Content
Los sistemas de diseño buscan aportar consistencia al diseño de una marca y hacer que el desarrollo de la interfaz de usuario sea productivo. Las bibliotecas de componentes con una API bien pensada pueden facilitar esto. Pero, ¡a veces una elección de API puede accidentalmente sobrepasar y ralentizar al equipo! Hay un equilibrio allí... en algún lugar. Exploremos algunos de los problemas y posibles soluciones creativas.
Concurrencia en React, Explicada
React Summit 2023React Summit 2023
23 min
Concurrencia en React, Explicada
Top Content
¡React 18! ¡Funciones concurrentes! Tal vez ya hayas probado las nuevas APIs como useTransition, o tal vez solo hayas oído hablar de ellas. Pero, ¿sabes cómo React 18 logra las mejoras de rendimiento que trae consigo? En esta charla, echemos un vistazo bajo el capó de las características de rendimiento de React 18: - Cómo React 18 reduce el tiempo que tu página permanece congelada (también conocido como TBT) - Qué sucede exactamente en el hilo principal cuando ejecutas useTransition() - Cuál es la trampa con las mejoras (¡no hay torta gratis!), y por qué Vue.js y Preact se negaron rotundamente a lanzar algo similar
Componentes de Full Stack
Remix Conf Europe 2022Remix Conf Europe 2022
37 min
Componentes de Full Stack
Top Content
Remix es un marco de trabajo web que te ofrece el modelo mental simple de una aplicación de múltiples páginas (MPA) pero el poder y las capacidades de una aplicación de una sola página (SPA). Uno de los grandes desafíos de las SPA es la gestión de la red que resulta en una gran cantidad de indirecciones y código defectuoso. Esto es especialmente notable en el estado de la aplicación que Remix elimina por completo, pero también es un problema en los componentes individuales que se comunican con un punto final de backend de un solo propósito (como una búsqueda de combobox, por ejemplo).
En esta charla, Kent demostrará cómo Remix te permite construir componentes de interfaz de usuario complejos que están conectados a un backend de la manera más simple y poderosa que hayas visto. Dejándote tiempo para relajarte con tu familia o lo que sea que hagas para divertirte.

Workshops on related topic

Masterclass de Depuración de Rendimiento de React
React Summit 2023React Summit 2023
170 min
Masterclass de Depuración de Rendimiento de React
Top Content
Featured WorkshopFree
Ivan Akulov
Ivan Akulov
Los primeros intentos de Ivan en la depuración de rendimiento fueron caóticos. Vería una interacción lenta, intentaría una optimización aleatoria, vería que no ayudaba, y seguiría intentando otras optimizaciones hasta que encontraba la correcta (o se rendía).
En aquel entonces, Ivan no sabía cómo usar bien las herramientas de rendimiento. Haría una grabación en Chrome DevTools o React Profiler, la examinaría, intentaría hacer clic en cosas aleatorias, y luego la cerraría frustrado unos minutos después. Ahora, Ivan sabe exactamente dónde y qué buscar. Y en esta masterclass, Ivan te enseñará eso también.
Así es como va a funcionar. Tomaremos una aplicación lenta → la depuraremos (usando herramientas como Chrome DevTools, React Profiler, y why-did-you-render) → identificaremos el cuello de botella → y luego repetiremos, varias veces más. No hablaremos de las soluciones (en el 90% de los casos, es simplemente el viejo y regular useMemo() o memo()). Pero hablaremos de todo lo que viene antes - y aprenderemos a analizar cualquier problema de rendimiento de React, paso a paso.
(Nota: Esta masterclass es más adecuada para ingenieros que ya están familiarizados con cómo funcionan useMemo() y memo() - pero quieren mejorar en el uso de las herramientas de rendimiento alrededor de React. Además, estaremos cubriendo el rendimiento de la interacción, no la velocidad de carga, por lo que no escucharás una palabra sobre Lighthouse 🤐)
Consejos sobre React Hooks que solo los profesionales conocen
React Summit Remote Edition 2021React Summit Remote Edition 2021
177 min
Consejos sobre React Hooks que solo los profesionales conocen
Top Content
Featured Workshop
Maurice de Beijer
Maurice de Beijer
La adición de la API de hooks a React fue un cambio bastante importante. Antes de los hooks, la mayoría de los componentos tenían que ser basados en clases. Ahora, con los hooks, estos son a menudo componentes funcionales mucho más simples. Los hooks pueden ser realmente simples de usar. Casi engañosamente simples. Porque todavía hay muchas formas en las que puedes equivocarte con los hooks. Y a menudo resulta que hay muchas formas en las que puedes mejorar tus componentes con una mejor comprensión de cómo se puede usar cada hook de React.Aprenderás todo sobre los pros y los contras de los diversos hooks. Aprenderás cuándo usar useState() versus useReducer(). Veremos cómo usar useContext() de manera eficiente. Verás cuándo usar useLayoutEffect() y cuándo useEffect() es mejor.
React, TypeScript y TDD
React Advanced Conference 2021React Advanced Conference 2021
174 min
React, TypeScript y TDD
Top Content
Featured WorkshopFree
Paul Everitt
Paul Everitt
ReactJS es extremadamente popular y, por lo tanto, ampliamente soportado. TypeScript está ganando popularidad y, por lo tanto, cada vez más soportado.

¿Los dos juntos? No tanto. Dado que ambos cambian rápidamente, es difícil encontrar materiales de aprendizaje precisos.

¿React+TypeScript, con los IDEs de JetBrains? Esa combinación de tres partes es el tema de esta serie. Mostraremos un poco sobre mucho. Es decir, los pasos clave para ser productivo, en el IDE, para proyectos de React utilizando TypeScript. En el camino, mostraremos el desarrollo guiado por pruebas y enfatizaremos consejos y trucos en el IDE.
Diseñando Pruebas Efectivas con la Biblioteca de Pruebas de React
React Summit 2023React Summit 2023
151 min
Diseñando Pruebas Efectivas con la Biblioteca de Pruebas de React
Top Content
Featured Workshop
Josh Justice
Josh Justice
La Biblioteca de Pruebas de React es un gran marco para las pruebas de componentes de React porque responde muchas preguntas por ti, por lo que no necesitas preocuparte por esas preguntas. Pero eso no significa que las pruebas sean fáciles. Todavía hay muchas preguntas que tienes que resolver por ti mismo: ¿Cuántas pruebas de componentes debes escribir vs pruebas de extremo a extremo o pruebas de unidad de nivel inferior? ¿Cómo puedes probar una cierta línea de código que es difícil de probar? ¿Y qué se supone que debes hacer con esa persistente advertencia de act()?
En esta masterclass de tres horas, presentaremos la Biblioteca de Pruebas de React junto con un modelo mental de cómo pensar en el diseño de tus pruebas de componentes. Este modelo mental te ayudará a ver cómo probar cada bit de lógica, si debes o no simular dependencias, y ayudará a mejorar el diseño de tus componentes. Te irás con las herramientas, técnicas y principios que necesitas para implementar pruebas de componentes de bajo costo y alto valor.
Tabla de contenidos- Los diferentes tipos de pruebas de aplicaciones de React, y dónde encajan las pruebas de componentes- Un modelo mental para pensar en las entradas y salidas de los componentes que pruebas- Opciones para seleccionar elementos DOM para verificar e interactuar con ellos- El valor de los mocks y por qué no deben evitarse- Los desafíos con la asincronía en las pruebas de RTL y cómo manejarlos
Requisitos previos- Familiaridad con la construcción de aplicaciones con React- Experiencia básica escribiendo pruebas automatizadas con Jest u otro marco de pruebas unitarias- No necesitas ninguna experiencia con la Biblioteca de Pruebas de React- Configuración de la máquina: Node LTS, Yarn
IA a demanda: IA sin servidor
DevOps.js Conf 2024DevOps.js Conf 2024
163 min
IA a demanda: IA sin servidor
Top Content
Featured WorkshopFree
Nathan Disidore
Nathan Disidore
En esta masterclass, discutimos los méritos de la arquitectura sin servidor y cómo se puede aplicar al espacio de la IA. Exploraremos opciones para construir aplicaciones RAG sin servidor para un enfoque más lambda-esque a la IA. A continuación, nos pondremos manos a la obra y construiremos una aplicación CRUD de muestra que te permite almacenar información y consultarla utilizando un LLM con Workers AI, Vectorize, D1 y Cloudflare Workers.
Next.js 13: Estrategias de Obtención de Datos
React Day Berlin 2022React Day Berlin 2022
53 min
Next.js 13: Estrategias de Obtención de Datos
Top Content
WorkshopFree
Alice De Mauro
Alice De Mauro
- Introducción- Prerrequisitos para la masterclass- Estrategias de obtención: fundamentos- Estrategias de obtención – práctica: API de obtención, caché (estática VS dinámica), revalidar, suspense (obtención de datos en paralelo)- Prueba tu construcción y sírvela en Vercel- Futuro: Componentes de servidor VS Componentes de cliente- Huevo de pascua de la masterclass (no relacionado con el tema, destacando la accesibilidad)- Conclusión