Compartir es Cuidar: ¿Cómo 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 frontend en bloques más pequeños, individualmente desplegables, cada uno es propiedad de un equipo autónomo y se centra en un dominio empresarial. Pero, ¿qué pasa con el Estado? A menudo se nos dice que los micro frontends no deberían compartir estado, ya que esto los haría acoplados entre sí. Sin embargo, cuando se trata de interfaces de usuario complejas, no es raro encontrar escenarios donde la gestión del estado entre micro frontends es necesaria. Esta charla es sobre encontrar el punto dulce: ¿En qué escenarios es razonable que los micro frontends compartan Estado? y ¿cómo deberían los micro frontends compartir Estado mientras permanecen desacoplados entre sí? Discutimos y comparamos diferentes soluciones en React.

This talk has been presented at React Summit 2022, check out the latest edition of this React Conference.

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 a los equipos de desarrollo trabajar de forma autónoma y con menos fricciones y limitaciones. Organizar equipos en torno a preocupaciones empresariales, en alineación con subdominios, en lugar de preocupaciones técnicas, puede llevar a un software que se divide de manera agradable y las historias de usuario caen bajo la responsabilidad de un solo equipo. Tener un respaldo lógico o punto de referencia es importante para implementar microfrontends sin romper su aislamiento. Los microfrontends pueden comunicarse entre sí utilizando el objeto de ventana y eventos personalizados. Los microfrontends deben mantenerse aislados mientras mantienen la comunicación a través de varios enfoques.

1. Introducción a los Micro-frontends

Short description:

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

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

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

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

Entonces, comencemos desde otro ángulo. Hablemos de Agile. En Agile, a menudo trabajamos con historias de usuario. Entonces, las historias de usuario son esta breve descripción de un objetivo final que el usuario quisiera lograr, ¿verdad? Y siempre se describe desde la perspectiva del usuario y en términos de el negocio. Entonces, generalmente en muchas organizaciones, resolver una historia de usuario implicará la cooperación y coordinación de equipos de múltiples capas. Y eso es porque el código afectado al resolver esa historia a menudo se comparte entre estos equipos. Y eso es debido 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 los equipos. A veces se trata de poseer 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 sería una tarea de principio a fin de un solo equipo. Eso significa que el código afectado al resolver esa historia pertenecería a un solo equipo. Eso haría un flujo mucho más agradable, especialmente a escala. Una pregunta que deberíamos hacernos es cómo se organizan las historias de usuario. Desde una perspectiva orientada al dominio, las historias de usuario se organizan de acuerdo a los subdominios. Si solo tomamos una aplicación estándar de e-commerce, eso es el dominio más simple que podemos pensar, entonces una división normal a subdominios sería algo como un catálogo, orden, entrega, soporte, y quizás algunos otros subdominios. El subdominio del catálogo se preocupa por permitir a los usuarios navegar y buscar productos, mientras que los otros subdominios se preocupan por los usuarios que lanzan productos en

2. Implementación y Comunicación de Microfrontend

Short description:

Organizar equipos en torno a preocupaciones comerciales, en alineación con subdominios, en lugar de preocupaciones técnicas, puede llevar a un software que se divide de manera agradable y las historias de usuario caen bajo la responsabilidad de un solo equipo. Los microfrontends mejoran la segregación entre subdominios y dan a los equipos autonomía sobre la pila tecnológica. El diseño orientado al dominio, específicamente el DDD estratégico, ayuda a descomponer el dominio en subdominios. Cada contexto delimitado deriva una implementación de un microfrontend, simplificando la implementación y mejorando la comunicación. La herramienta de mapeo de contexto ayuda a entender las relaciones entre diferentes contextos y permite una comunicación efectiva entre micro front-ends.

subtarjetas y solicitando la entrega. Lo que podemos hacer es organizar equipos de acuerdo o alrededor de preocupaciones comerciales en alineación con subdominios en lugar de alrededor de algunas preocupaciones técnicas como componentes, páginas de vistas, y tal 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 obtener este software que se divide bien y que las historias de usuario son muy probable que caigan bajo la responsabilidad de un solo equipo.

Ahora, eso puede llevarse más allá, y aquí es donde volvemos a hablar de microfrontends. al dividir este monolito en diferentes microfrontends eso mejorará la segregación que hacemos entre entre subdominios, y también dará a los equipos un nivel adicional, otro nivel de autonomía en el nivel de la pila tecnológica porque ahora pueden elegir sus propias herramientas y en los patrones de diseño por ejemplo. Cada equipo puede optimizar los patrones de diseño que utiliza para el objetivo específico, los objetivos específicos que quiere lograr.

Entonces, mi punto aquí es que un terreno sólido para el microfrontend es considerar la alineación con aspectos comerciales. Es por eso que cuando hablamos de microfrontends tenemos que pensar en el diseño orientado al dominio, específicamente sobre el DDD estratégico. Entonces, el DDD estratégico es este conjunto de herramientas que nos permite descomponer correctamente nuestro dominio en varios subdominios de una manera que maximizará el potencial que tiene el microfrontend. DDD realmente nos dice reunir a nuestros expertos en dominios para tomar el tiempo y hacer una lluvia de ideas junto con otros interesados para formar este lenguaje inequívoco que realmente captura las entidades naturales y procesos que ocurren dentro de este subdominio. Y este lenguaje forma es un límite lógico que llamamos contexto delimitado. El contexto delimitado tiene mucho que ofrecer, muchos beneficios para trabajar con el contexto delimitado y derivar de ellos la implementación real del microfrontend. Entonces, cada contexto delimitado 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 delimitado. Entonces, tener un contexto delimitado que derive microfrontends tiene numerosos beneficios. El contexto delimitado puede simplificar drásticamente la implementación de cada microfrontend porque cada término en cada contexto delimitado se describe desde la perspectiva de ese contexto delimitado. Entonces, no tienes mucha información redundante que necesitas manejar. Solo manejas las cosas que son relevantes dentro de ese contexto. Y hay un beneficio más profundo para eso. Y ahora tenemos esto en cada contexto tenemos un lenguaje cohesivo inequívoco que todos entienden. Y eso hace que la comunicación sea mucho mejor. Y eso hace que sea mucho más fácil traducir las historias de usuario y así sucesivamente.

Pero quiero centrarme en otro beneficio que se relaciona con cómo debería comunicarse un micro-frontend. Tenemos otra herramienta que es parte del kit de herramientas DDD es la herramienta de mapeo de contexto. El mapeo de contexto se trata de entender, hacer una lluvia de ideas y entender las relaciones entre diferentes contextos. Entonces, por ejemplo, aquí aunque el término producto generalmente significa algo más, algo específico cuando hablamos de contexto de 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 el producto significará algo más en el contexto de la orden. Probablemente tendrá algún id, precio, descuentos, o todo lo que se relaciona con la orden. Pero aún así, aunque están definidos de manera diferente en esos diferentes contextos, todavía tienen esta conexión lógica entre ellos, ¿verdad? Porque queremos permitir a los usuarios dejar productos que encuentran en el catálogo en algún carrito que es naturalmente parte del contexto de la orden. Y eso puede ser, eso realmente realmente deriva una comunicación que debemos tener entre el front-end del catálogo y el front-end de la orden, ¿verdad? Esa pieza de información, un producto seleccionado, tiene que ser comunicada entre estos micro front-end. Entonces, vemos aquí una forma de entender lógicamente cuáles son las conexiones que debemos hacer entre los contextos, y luego derivar de allí la comunicación entre la implementación, entre los micro front-end reales. Y eso puede ayudarnos a evitar la comunicación innecesaria, y también puede ayudarnos a entender 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
Kent C. Dodds discusses the concept of problem elimination rather than just problem-solving. He introduces the idea of a problem tree and the importance of avoiding creating solutions prematurely. Kent uses examples like Tesla's electric engine and Remix framework to illustrate the benefits of problem elimination. He emphasizes the value of trade-offs and taking the easier path, as well as the need to constantly re-evaluate and change approaches to eliminate problems.
Escalando con Remix y Micro Frontends
Remix Conf Europe 2022Remix Conf Europe 2022
23 min
Escalando con Remix y Micro Frontends
Top Content
This talk discusses the usage of Microfrontends in Remix and introduces the Tiny Frontend library. Kazoo, a used car buying platform, follows a domain-driven design approach and encountered issues with granular slicing. Tiny Frontend aims to solve the slicing problem and promotes type safety and compatibility of shared dependencies. The speaker demonstrates how Tiny Frontend works with server-side rendering and how Remix can consume and update components without redeploying the app. The talk also explores the usage of micro frontends and the future support for Webpack Module Federation in Remix.
Uso efectivo de useEffect
React Advanced Conference 2022React Advanced Conference 2022
30 min
Uso efectivo de useEffect
Top Content
Today's Talk explores the use of the useEffect hook in React development, covering topics such as fetching data, handling race conditions and cleanup, and optimizing performance. It also discusses the correct use of useEffect in React 18, the distinction between Activity Effects and Action Effects, and the potential misuse of useEffect. The Talk highlights the benefits of using useQuery or SWR for data fetching, the problems with using useEffect for initializing global singletons, and the use of state machines for handling effects. The speaker also recommends exploring the beta React docs and using tools like the stately.ai editor for visualizing state machines.
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
The Talk discusses the balance between flexibility and consistency in design systems. It explores the API design of the ActionList component and the customization options it offers. The use of component-based APIs and composability is emphasized for flexibility and customization. The Talk also touches on the ActionMenu component and the concept of building for people. The Q&A session covers topics such as component inclusion in design systems, API complexity, and the decision between creating a custom design system or using a component library.
Concurrencia en React, Explicada
React Summit 2023React Summit 2023
23 min
Concurrencia en React, Explicada
Top Content
React 18's concurrent rendering, specifically the useTransition hook, optimizes app performance by allowing non-urgent updates to be processed without freezing the UI. However, there are drawbacks such as longer processing time for non-urgent updates and increased CPU usage. The useTransition hook works similarly to throttling or bouncing, making it useful for addressing performance issues caused by multiple small components. Libraries like React Query may require the use of alternative APIs to handle urgent and non-urgent updates effectively.
Gestión del Estado de React: 10 Años de Lecciones Aprendidas
React Day Berlin 2023React Day Berlin 2023
16 min
Gestión del Estado de React: 10 Años de Lecciones Aprendidas
Top Content
This Talk focuses on effective React state management and lessons learned over the past 10 years. Key points include separating related state, utilizing UseReducer for protecting state and updating multiple pieces of state simultaneously, avoiding unnecessary state syncing with useEffect, using abstractions like React Query or SWR for fetching data, simplifying state management with custom hooks, and leveraging refs and third-party libraries for managing state. Additional resources and services are also provided for further learning and support.

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.
Master Patrones de JavaScript
JSNation 2024JSNation 2024
145 min
Master Patrones de JavaScript
Featured Workshop
Adrian Hajdin
Adrian Hajdin
Durante este masterclass, los participantes revisarán los patrones esenciales de JavaScript que todo desarrollador debe conocer. A través de ejercicios prácticos, ejemplos del mundo real y discusiones interactivas, los asistentes profundizarán su comprensión de las mejores prácticas para organizar el código, resolver desafíos comunes y diseñar arquitecturas escalables. Al final del masterclass, los participantes ganarán confianza en su capacidad para escribir código JavaScript de alta calidad que perdure en el tiempo.
Puntos Cubiertos:
1. Introducción a los Patrones de JavaScript2. Patrones Fundamentales3. Patrones de Creación de Objetos4. Patrones de Comportamiento5. Patrones Arquitectónicos6. Ejercicios Prácticos y Estudios de Caso
Cómo Ayudará a los Desarrolladores:
- Obtener una comprensión profunda de los patrones de JavaScript y sus aplicaciones en escenarios del mundo real- Aprender las mejores prácticas para organizar el código, resolver desafíos comunes y diseñar arquitecturas escalables- Mejorar las habilidades de resolución de problemas y la legibilidad del código- Mejorar la colaboración y comunicación dentro de los equipos de desarrollo- Acelerar el crecimiento profesional y las oportunidades de avance en la industria del software