Aunque la división horizontal es funcional y útil, no trabajé en las empresas que podrían beneficiarse de ella en su totalidad. Y normalmente, son las empresas de e-commerce porque pueden renderizar sus micro-fuentes en los back-ends. Pueden enviar el paquete resultante como HTML. Como estamos construyendo nuestros micro-frontends en la interfaz de usuario, no podemos permitirnos tener un tamaño de paquete de 30 megabytes. Era importante para nosotros ser más razonables al respecto.
Tanto en FreshBooks como en Persona, optamos por utilizar la arquitectura de microfrontend de división vertical. Ahora, hablemos de los desafíos. El primer desafío es definir la estrategia de migración. Si tienes un producto grande, no puedes decidir de repente que tienes algo nuevo. Tienes que reiniciar lo anterior y obtener tres años de esfuerzos de desarrollo de algún lugar y construir la cosa. Si eres razonable al respecto, existe un patrón que se llama Patrón más Fuerte, que básicamente te sugiere envolver la cosa vieja en un marco de Fachada y empezar a crecer la cosa nueva al lado de ella hasta que finalmente elimines la cosa vieja. Sé realista, invierte en tooling porque lo más probable es que te quedes atascado en el paso 2 para siempre, así que necesitas sentirte cómodo en esta situación.
Otro desafío es dividir los dominios. El design orientado al dominio no son temas extremadamente simples. Hay muchos libros al respecto. Es un desafío en los back-ends, también es un desafío en los front-ends, y esos desafíos no necesariamente responden a la misma pregunta. Está bien si tus dominios de front-end van a ser diferentes a tus dominios de back-end. Si optas por la arquitectura de división vertical, vas a tener páginas que tienen múltiples dominios de back-end mostrando data. Sin embargo, quieres mantenerlo como un solo micro-fuente. Así que está bien tener diferencias en los límites del dominio. Los dominios muy pequeños pueden hacer que construyas esos múltiples micro-frontends juntos solo para probarlos, porque una prueba va a pasar por múltiples micro-frontends para comprobar el flujo de negocio, lo cual tampoco es perfecto, y una gran cantidad de dominios pequeños puede llevarte al mismo problema con el que empezamos, con alguien arreglando código que nadie posee exactamente.
El tercer desafío es gestionar las dependencias y los pipelines. Lo odio mucho. Es realmente difícil, y lo hicimos mal, completamente mal. Así que el enfoque intuitivo para construir cosas es como, está bien, tengo un estante para esto, tengo un estante para esto, y vamos a separar las cosas. Paquete npm separado para nuestros componentes, sistema de design, paquete separado para ayudantes, hasta que empiezas a juntarlo y a depurar, y hasta que quieres debug tu componente dentro de la aplicación, y entonces tienes el proceso de, está bien, necesito actualizar el componente. Así que vas al repositorio del componente, construyes, cambias los componentes, construyes los componentes, los despliegas en artifactory o npm, lo que uses. Luego actualizas la versión del paquete en tu aplicación, y luego reinstalas las dependencias, y luego puedes ver cómo funcionó. Y si quieres debug algo de CSS simple, se vuelve bastante doloroso. Afortunadamente, hay soluciones, ninguna de las cuales encontramos lo suficientemente útil para nosotros y conveniente para que las usemos.
Comments