La magia de construir una arquitectura de sistema de diseño multiplataforma

Rate this content
Bookmark

Cuando queremos construir una aplicación móvil "multiplataforma", la respuesta siempre es React Native, pero ¿qué pasa si quieres construir una aplicación "multiplataforma" que se ejecute en dispositivos móviles y navegadores? Aquí es donde React Native se queda corto. react-native-web intenta cerrar esta brecha hasta cierto punto, pero el requisito principal es escribir tu código en React Native, que se convierte en código web, pero esto tiene varias desventajas y la más grande es obligar a los desarrolladores de aplicaciones móviles a entender cómo funcionan los navegadores. En esta charla, compartiré cómo estamos construyendo una arquitectura verdaderamente multiplataforma sin usar react-native-web para nuestro sistema de diseño en Razorpay.

FAQ

Un sistema de diseño multiplataforma es un conjunto de prácticas y herramientas que permiten que un lenguaje de diseño funcione de manera consistente y eficiente en varias plataformas, como dispositivos móviles y web.

Los beneficios incluyen la utilización de capacidades nativas de cada plataforma, mejora en la consistencia del diseño, reducción de código redundante y unificación de APIs, lo que facilita el mantenimiento y la escalabilidad del proyecto.

React Native Web, aunque permite un desarrollo unificado, presenta desafíos en la depuración para la web debido a que está orientado primero a plataformas nativas, lo que puede complicar la identificación y solución de errores específicos de la web.

Se logra mediante la definición de una API común que abstracta los componentes específicos de cada plataforma y la utilización de herramientas que permitan resolver adecuadamente los archivos y configuraciones para cada entorno de ejecución.

Se utiliza Jest configurado de manera específica para cada plataforma, permitiendo incluir o excluir archivos de prueba según la plataforma. Esto asegura que cada componente funcione correctamente en su respectivo entorno.

Se utiliza Rollup junto con Babel para configurar y empaquetar el sistema de diseño de manera separada para cada plataforma, asegurando que los componentes y tipos sean adecuados y funcionales para cada entorno.

Las declaraciones de tipos se manejan utilizando Rollup con un plugin especial que genera paquetes de archivos de declaración, asegurando que sean consistentes y estén sincronizados con los componentes en las diferentes plataformas.

Kamlesh Chandnani
Kamlesh Chandnani
23 min
05 Dec, 2022

Comments

Sign in or register to post your comment.

Video Summary and Transcription

Esta charla discute el desarrollo de una arquitectura de sistema de diseño multiplataforma. Explora diferentes enfoques y propone una API unificada que funciona en plataformas web y nativas. La charla cubre técnicas para resolver archivos y declaraciones, configurar bundlers y realizar pruebas tanto en plataformas web como nativas. También destaca el empaquetado de tipos TypeScript y el manejo de la accesibilidad para diferentes plataformas.

1. Introducción a los sistemas de diseño multiplataforma

Short description:

Hola a todos. Soy Kamlesh. Trabajo como ingeniero de producto principal en el equipo de sistemas de diseño y herramientas de infraestructura, que forma parte del equipo de plataformas en Razorpay. Hoy voy a hablar sobre la magia de construir una arquitectura de sistemas de diseño multiplataforma. Queríamos un sistema de lenguaje de diseño que funcionara en varias plataformas. El primer enfoque fue que cada equipo construyera para cada plataforma.

Hola a todos. Soy Kamlesh. Trabajo como ingeniero de producto principal en el equipo de sistemas de diseño y herramientas de infraestructura, que forma parte del equipo de plataformas en Razorpay. Así que, hoy voy a hablar sobre la magia de construir una arquitectura de sistemas de diseño multiplataforma. Entonces, antes de comenzar, quiero aclarar que esto se basa en nuestra experiencia y en cómo abordamos este espacio de problemas según los factores. Y eso no significa necesariamente que sea la única forma. Así que, comencemos primero con el enunciado del problema. Queríamos un sistema de lenguaje de diseño que funcionara en varias plataformas. Ahora, comenzamos con qué otros enfoques tenemos disponibles. El primer enfoque fue que cada equipo construyera para cada plataforma. Eso es natural. Tienes diferentes equipos, diferentes plataformas y tienes diferentes equipos trabajando.

2. Enfoque de los Sistemas de Diseño Multiplataforma

Short description:

Exploramos diferentes enfoques, incluyendo utilizar la experiencia de equipos individuales para cada plataforma y aprovechar las capacidades nativas ofrecidas por cada plataforma. Sin embargo, ninguno de ellos cumplía con nuestras necesidades de una API unificada que funcione en la web y en las plataformas nativas. Por lo tanto, desarrollamos nuestro propio enfoque, buscando un estado de Nirvana donde los desarrolladores pudieran implementar código una vez y que funcione sin problemas en ambas plataformas. Identificamos la necesidad de una API unificada, un centro de pruebas, empaquetado separado para cada plataforma y enviar tipos de TS con los paquetes individuales. Para demostrarlo, implementaremos un componente tipográfico que funcione en ambas plataformas, comenzando con la plataforma web.

en esas plataformas. Y luego comenzamos a enumerar los pros y los contras de cada uno de los enfoques. Entonces, los pros de este enfoque eran que teníamos la experiencia de las personas para cada plataforma. Digamos que un desarrollador nativo estaba trabajando en una aplicación de iOS, tendrían su propio conjunto de conocimientos. Y luego otro desarrollador web estaba trabajando en la plataforma web, tendrían su propio conjunto de conocimientos. Así que, queríamos ambos. Y también podríamos aprovechar las capacidades nativas ofrecidas por cada plataforma porque hay muchas capacidades que, digamos, a veces las plataformas nativas te ofrecen, pero las plataformas web no, o las han expuesto de una manera diferente. Así que, queríamos aprovechar estas capacidades de forma nativa en cada una de las plataformas.

Los contras de este enfoque son múltiples equipos construyendo lo mismo, ¿verdad? Como tienes varias personas que están resolviendo el mismo problema una y otra vez. Y luego teníamos código redundante para cosas similares. El tercero era una menor unificación de las API, ¿verdad? Porque ahora tus API serían redundantes o serían creadas por diferentes equipos.

Luego había otro enfoque que era usar React Native Web, por supuesto, que es una opción muy famosa en estos días. Así que tenía pros, que era que podías escribir una vez y usarlo en la web y en las plataformas nativas, que es lo que estábamos buscando. En segundo lugar, eran API similares en todas las plataformas. Los contras eran que React Native Web se usa para escribir también para la web, ¿verdad? Ahora los desafíos para React Native Web para debug cosas de la web. Es como nativo primero y luego penetrar con la web.

Ahora, ninguno de los anteriores cumplía con nuestras necesidades. Estábamos buscando algo que tuviera una misma API y funcionara en la web y en las plataformas nativas, aprovechar las capacidades nativas ofrecidas por cada plataforma y luego queríamos que los desarrolladores de aplicaciones hicieran lo que mejor saben hacer y los desarrolladores web hicieran lo que mejor saben hacer. Así que, básicamente, nuestro deseo en el estado de Nirvana era qué pasaría si un desarrollador tuviera que implementar lo siguiente en plataformas, para ellos debería ser como para nosotros si tomas este subcódigo y lo copias y pegas tanto en la web como en las plataformas nativas, debería funcionar sin problemas. Eso era como podrías decir nuestro estado de Nirvana. Entonces, ¿cómo abordamos esto? Así que, enumeramos todas las cosas que necesitamos abordar. La primera fue una API única que funcionara en todas las plataformas, luego queríamos un testing center porque aunque escribieras una vez y ejecutaras en ambas plataformas, aún queríamos probar nuestros componentes en ambas plataformas individualmente para no perder ningún error en ninguna de las plataformas. Y luego queríamos empaquetar cada plataforma por separado para que tu paquete web no se mezcle con react native y viceversa porque de lo contrario se romperá. Y también queríamos enviar tipos de TS junto con cada uno de estos paquetes individuales.

Sí, veamos las cosas en acción implementando un componente tipográfico. Entonces, este es el componente que implementaremos y debería funcionar tal como está en ambas plataformas. Esto es básicamente y el estado que haremos durante esta sesión. Ahora, comencemos con el primero, mismas APIs que funcionan en todas las plataformas. Entonces, si lo piensas, la API para esto se vería algo así, digamos que quieres design o crear un componente tipográfico, ¿cómo se vería la API? Tendría ID de color, familia de fuentes, tamaño de fuente, peso de fuente, estas son las propiedades básicas para un componente tipográfico. Entonces, por lo general, lo que harías es comenzar implementando plataforma por plataforma. Así que, lo obvio para comenzar es simplemente implementarlo en la web.

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

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.
Construir un Sistema de Diseño con React y Tailwind CSS
React Summit 2022React Summit 2022
27 min
Construir un Sistema de Diseño con React y Tailwind CSS
Top Content
Tailwind CSS, con su enfoque de utilidad primero, es conocido por acelerar el proceso de desarrollo. Combinándolo con el poder de React, veamos cómo puedes construir un sistema de diseño personalizado para tu proyecto para acelerarlo aún más, hacerlo escalable y también fácil de mantener.
Caminando en la línea entre la flexibilidad y la consistencia en las bibliotecas de componentes
React Summit 2022React Summit 2022
27 min
Caminando en la línea entre la flexibilidad y la consistencia en las bibliotecas de componentes
Los sistemas de diseño tienen como objetivo brindar 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 hacer que esto sea muy fácil. Pero, ¡a veces una elección de API puede sobrepasarse accidentalmente y ralentizar al equipo! Hay un equilibrio ahí... en algún lugar. Vamos a explorar algunos de los problemas y posibles soluciones creativas.
Descubre si tu sistema de diseño es mejor que nada
React Summit 2022React Summit 2022
20 min
Descubre si tu sistema de diseño es mejor que nada
Construir un sistema de diseño no es suficiente. Tu equipo de desarrollo debe preferirlo sobre los componentes individuales y las bibliotecas de terceros. De lo contrario, todo el esfuerzo es una pérdida de tiempo. Aprende cómo utilizar el análisis de código estático para medir si tu sistema de diseño supera a la competencia interna y formas basadas en datos para mejorar tu posición.
Dilemas de los diálogos y travesuras modales: Un análisis profundo de las ventanas emergentes
JSNation 2023JSNation 2023
10 min
Dilemas de los diálogos y travesuras modales: Un análisis profundo de las ventanas emergentes
Nuestros sistemas de diseño comúnmente incluyen componentes que se muestran encima de otro contenido: tooltips, date pickers, menús y enseñanza de la interfaz de usuario, por nombrar solo algunos. Las actualizaciones propuestas para la plataforma web están a punto de hacer que construir estos sea mucho más fácil. Es posible que ni siquiera necesites JavaScript. En esta charla, aprenderás todo sobre el próximo atributo 'popover', la modalidad y la capa superior.
Estilo Seguro para Paquetes de Componentes React: Vanilla Extract CSS
React Advanced Conference 2023React Advanced Conference 2023
19 min
Estilo Seguro para Paquetes de Componentes React: Vanilla Extract CSS
Desbloquea el poder del estilo seguro en paquetes de componentes React con Vanilla Extract CSS. Aprende cómo escribir estilos escalables y mantenibles sin esfuerzo, aprovechando CSS-en-Typescript. Descubre la integración perfecta de Vanilla Extract CSS y lleva tus componentes React al siguiente nivel.

Workshops on related topic

Desarrollo Rápido de UI en React: Aprovechando Bibliotecas de Componentes Personalizadas y Sistemas de Diseño
React Advanced Conference 2022React Advanced Conference 2022
118 min
Desarrollo Rápido de UI en React: Aprovechando Bibliotecas de Componentes Personalizadas y Sistemas de Diseño
Workshop
Richard Moss
Richard Moss
En este masterclass, recorreremos los enfoques más efectivos para construir componentes de UI escalables que mejoren la productividad y felicidad del desarrollador :-) Esto implicará una combinación de ejercicios prácticos y presentaciones, que cubrirán los aspectos más avanzados de la popular biblioteca styled-components, incluyendo la tematización e implementación de utilidades styled-system a través de props de estilo para un desarrollo rápido de UI, y culminando en cómo puedes construir tu propia biblioteca de componentes personalizada y escalable.
Nos enfocaremos tanto en el escenario ideal, donde trabajas en un proyecto nuevo, como en tácticas para adoptar incrementalmente un sistema de diseño y enfoques modernos para el estilo en una base de código existente con algo de deuda técnica (¡que suele ser el caso!). Al final del masterclass, deberías sentir que comprendes los compromisos entre diferentes enfoques y sentirte seguro para comenzar a implementar las opciones disponibles para avanzar hacia el uso de una biblioteca de componentes basada en un sistema de diseño en la base de código en la que trabajas.
Prerrequisitos: - Familiaridad y experiencia trabajando en grandes bases de código de React- Una buena comprensión de los enfoques comunes para el estilo en React