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.

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

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 2021React Advanced 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.
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
This Talk discusses design systems and how to build one using React and Tailwind CSS. Tailwind CSS provides utility classes for building complex layouts without writing CSS rules. Custom colors can be added to the Tailwind CSS config file, and font styles and text sizes can be customized. The entire Tailwind CSS configuration can be customized to meet specific requirements. Base styles can be added to the config file itself using a plugin. Reusable components can be created with Tailwind CSS, allowing for easy customization of size and color.
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
This Talk discusses the comparison between Polaris and Material UI component libraries in terms of consistency and flexibility. It highlights the use of the action list pattern and the customization options available for the action list component. The Talk also emphasizes the introduction of a composite component to improve API flexibility. Additionally, it mentions the importance of finding the right balance between flexibility and consistency and the use of types to enforce specific child components.
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
Building a design system without adoption is a waste of time. Grafana UI's adoption is growing consistently over time. The factors affecting design system adoption include the source mix changing, displacement of Homebrew components by Grafana UI, and the limitations of Grafana UI's current state. Measuring adoption is important to determine the success of a design system. The analysis of code through static code analysis tools is valuable in detecting and tracking component usage.
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
The Talk discusses the use of dialogues and popovers in web development. Dialogues can be modal or non-modal and are now accessibility-supported. Popovers are versatile and can be added to any element without JavaScript. They provide suggestions, pickers, teaching UI, list boxes, and action menus. Modal and non-modal dialogues and popovers have different behaviors and dismissal methods. Browser support for these features is expanding, but there are still open questions about positioning, semantics, and other use cases.
Estilo Seguro para Paquetes de Componentes React: Vanilla Extract CSS
React Advanced 2023React Advanced 2023
19 min
Estilo Seguro para Paquetes de Componentes React: Vanilla Extract CSS
Today's Talk introduces Vanilla Extract CSS, a type-safe styling method for React applications. It combines the benefits of scoped styling, zero runtime overhead, and a great developer experience. Vanilla Extract generates a static CSS file at build time, resulting in better performance. It is framework agnostic and offers a powerful toolkit, including Sprinkles for utility classes and CSS utils for calculations. With type safety and the ability to define themes and variants, Vanilla Extract makes it easy to create efficient, scalable, and maintainable design system component packages.

Workshops on related topic

Desarrollo Rápido de UI en React: Aprovechando Bibliotecas de Componentes Personalizadas y Sistemas de Diseño
React Advanced 2022React Advanced 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