Sistemas de Diseño: Caminando la Línea Entre Flexibilidad y Consistencia

Rate this content
Bookmark

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.

FAQ

La API de Shopify es muy controlada y no permite personalizaciones como cambiar estilos o nombres de clase, mientras que la API de Material UI es extremadamente flexible, permitiendo personalizar casi cualquier aspecto, como colores, bordes e íconos.

Una biblioteca más controlada como Polaris de Shopify genera resultados predecibles y consistentes, ideal para productos específicos que buscan mantener una uniformidad. Por otro lado, una biblioteca flexible como Material UI es adecuada para productos que requieren adaptación y personalización intensiva.

Es importante considerar si la biblioteca está construida para una marca específica o para uso de código abierto, la cultura de diseño dentro de la empresa, y la madurez de los productos en los que se trabajará, evaluando si los patrones ya están establecidos o si aún se está en una fase experimental.

Sid explora diferentes configuraciones de API, discutiendo la posibilidad de usar objetos y tipos específicos para manejar variaciones como divisores y acciones destructivas, buscando un equilibrio entre ocultar detalles de implementación y proporcionar suficiente flexibilidad para diferentes casos de uso.

Una API componible permite una mayor flexibilidad y adaptabilidad, facilitando la integración y personalización de componentes según las necesidades específicas de cada producto, sin romper la consistencia y manteniendo la coherencia en el diseño y comportamiento general.

Siddharth Kshetrapal
Siddharth Kshetrapal
47 min
22 Oct, 2021

Comments

Sign in or register to post your comment.

Video Summary and Transcription

La Charla discute el equilibrio entre flexibilidad y consistencia en los sistemas de diseño. Explora el diseño de la API del componente ActionList y las opciones de personalización que ofrece. Se enfatiza el uso de APIs basadas en componentes y la componibilidad para la flexibilidad y personalización. La Charla también toca el componente ActionMenu y el concepto de construir para las personas. La sesión de preguntas y respuestas cubre temas como la inclusión de componentes en sistemas de diseño, la complejidad de la API, y la decisión entre crear un sistema de diseño personalizado o usar una biblioteca de componentes.

1. Flexibilidad vs Consistencia en Sistemas de Diseño

Short description:

Hola, soy Sid. Trabajo en el equipo de sistema de diseño en GitHub. Quiero hablar sobre caminar la delgada línea entre la flexibilidad y la consistencia. Tengo esta alerta que he estado mirando en otros sistemas de diseño para inspiración, para ideas de API, todo eso. Y estaba mirando esta alerta e intentando construirla con Polaris de Shopify y la Biblioteca de Componentes de Material UI. Así es como difieren. Con Shopify, es una API de configuración estrictamente controlada, mientras que Material UI ofrece más flexibilidad. El espectro de flexibilidad depende de varios factores como el público objetivo, la cultura de diseño y la madurez del producto. Es importante encontrar el equilibrio correcto para tu biblioteca de componentes. ¡Gracias por venir a mi charla!

Hola, soy Sid. Trabajo en el equipo de sistema de diseño en GitHub. Quiero hablar sobre caminar la delgada línea entre la flexibilidad y la consistencia. Así que comencemos directamente con code.

Tengo esta alerta que he estado mirando en otros sistemas de diseño para inspiración, para ideas de API, todo eso. Y estaba mirando esta alerta e intentando construirla con Polaris de Shopify y la Biblioteca de Componentes de Material UI. Así es como difieren.

Así que con Shopify lo llaman banner. Así que renderizas un banner y luego toma un estado, en este caso el estado es crítico, y toma un título. Así que toma estas propiedades como configuración, ¿verdad? Así que el título no va en el hijo, va en el componente como una propiedad. Y luego tienes la acción y solo dices cuál es la acción y cuáles son los contenidos que van dentro de la acción. Realmente no llegas a elegir la acción por sí misma. Y el componente se encarga de dónde se renderiza, cómo se renderiza, qué color, el borde, todo eso. Así que este es un ejemplo de una API de configuración, que está muy controlada.

Y de hecho, si lo intentas, jugué con esto. Cuando intenté dar una etiqueta de estilo, intenté darle diferentes nombres de clase. No acepta ninguno. Esto es lo que obtienes. Y luego cuando intenté construir lo mismo con Material UI, tenían una gravedad también. Lo llaman error no crítico, que es todo lo mismo. Pero podrías darle cualquier icono que quieras. Así que pude importar un icono del icono Material y pasarlo. También podría darle diferentes estilos. Así que pude personalizar el borde. Y para los contenidos dentro, tuve que tomar el título de la alerta que exportan y tomar un botón e intentar hacer que el botón se vea exactamente como yo quiero. Más el espacio entre ellos, tuve que hacerlo con el margen entre los componentes. Así que eso es solo un pequeño ejemplo de cómo la flexibilidad puede ser tan diferente entre dos componentes. Como si comparas la API de estos, la de Shopify está súper controlada versus la de Material UI puedes personalizar básicamente cualquier cosa que quieras. Eso nos lleva a esta línea o este espectro de flexibilidad donde Polaris probablemente esté en algún lugar aquí. Así que es muy opinado. Está construido para Shopify. No está construido para todos. Tiene una API muy estricta y eso lleva a resultados predecibles y consistentes. Cuando usas ese banner, sabes exactamente lo que va a salir. Pero entonces podría volverse rígido y restrictivo para la experimentación o diferentes casos de uso. Lo siento. Por otro lado, el de Material UI probablemente esté en algún lugar en el borde derecho. Tal vez incluso todo el camino allí. Y eso es porque es de código abierto. Tiene una API extremadamente flexible porque no tiene contexto de dónde se usará. Así que necesita ser flexible para que puedas encajarlo en el producto que estás construyendo. Y luego, por supuesto, con tanta personalización, puede volverse desordenado y fragmentado porque, bueno, la biblioteca de componentes no tiene muchas decisiones de diseño incorporadas. Todas esas están en el lado del producto. Así que tomando esto, es como, ¿qué es lo correcto para ti? ¿Dónde debería caer tu biblioteca de componentes en el espectro de flexibilidad? Y la respuesta es que depende, ¿no es así? Siempre. Pero esto es de lo que depende. Depende de si tu biblioteca de componentes está construida para una marca o está construida para código abierto? Que es como todos. ¿Cuál es la cultura de diseño en la marca para la que trabajas? ¿Está consolidada con un pequeño grupo de diseñadores o es un montón de equipos independientes que operan prácticamente por su cuenta? ¿E incluso cuál es la madurez de los productos en los que estás trabajando? ¿Tienes patrones establecidos o todavía es temprano y es más experimental, todavía jugando para encontrar esos patrones?

Así que la respuesta entonces básicamente es que depende, ¿verdad? Gracias por venir a mi charla. Adiós. Pero no, intenté usar estos e intenté aplicarlos a este componente.

2. Componente ActionList y Diseño de API

Short description:

Este es un componente ActionList con varias variaciones utilizadas en GitHub. El recorrido del diseño de la API explora el equilibrio entre el control y la flexibilidad. El menú se puede crear pasando elementos a la lista de acciones y definiendo el comportamiento al seleccionar. Para diferentes acciones, se considera una API de divisor, con la opción de usar un texto específico o un tipo. ActionList.divider proporciona un buen equilibrio al ocultar el detalle de implementación.

Este es un componente ActionList dentro de una superposición. Y lo verás repartido por GitHub. Hay muchas variaciones de esto, pero este es un componente bastante involucrado. Así que tiene un montón de variaciones. Y estas son algunas de ellas. Así que lo ves en una página de repositorio. Justo al lado, ves esto como opciones en un menú desplegable. Ves estos como en el panel de lanzamientos. Este es el de los lanzamientos. También los ves al intentar seleccionar asignados o revisores. Así que hay un montón de... Hay mucho rango en este componente.

Y estaba tratando de averiguar cómo debería ser la API, ¿cuánto control o flexibilidad debería tener? Y déjame llevarte a través de ese viaje, para que pueda cuantificar lo que significa depende. Así que hagamos este ejercicio de API desde el principio. Estoy construyendo esta lista de acciones. Esta es la página de problemas. Y rápida advertencia para ti, ninguno de estos diseños es realmente producción design. Todos son de una exploración. Así que si no coincide exactamente con la estética de lo que ves en GitHub.com, eso es realmente intencional. Todo esto es una exploración.

Bueno, dicho esto, este es el menú que ves, y tiene algunos estilos. Creo que tiene algunas interacciones de teclado. Sí, ahí lo tienes. Así que para hacer este menú, veamos, el menú más sencillo aquí podría ser, tienes una lista de acciones y simplemente le pasas elementos, y los elementos son estas opciones que vas a hacer. Y luego al seleccionar, haces algo con ello. Así que puedes llamar a tu propia acción dependiendo de la cadena. Se siente un poco raro hacer estas acciones basándose sólo en el contenido de la cadena. Como si dices respuesta de cita, esto es lo que obtienes a cambio. Así que se siente raro actuar sólo en una cadena. Así que tal vez algo como esto es mejor donde es una configuración, es un objeto, y luego puedes pasar en tu on select. Así que dependiendo de la copia de eso, también puedes pasar lo que debería ser la selección. Y eso se siente decente.

Así que pasamos al siguiente caso de uso donde no todas estas tienen las mismas acciones. Así que algunas de estas se basan en la acción de, ya sabes, como, llevarlo fuera. Algunas de estas son sobre el contenido en sí. Así que editar y eliminar. Y esta es la tercera, que es, ya sabes, es un informe. Es una cosa de moderación. Así que queremos separarlos con divisores y ahora ¿cómo debería ser la API del divisor? Así que pensé en ello y estaba pensando que ya tienes texto, ¿debería ser como un texto secreto muy específico que das. Como si me das un divisor de subrayado, entonces sé cómo poner un divisor o tal vez no debería hacer eso en absoluto. Tal vez debería ser un tipo, ¿verdad? Y todos los demás son de tipo fila y este es de tipo divisor. Pero entonces, por supuesto, ya sabes, ¿es un divisor en minúsculas, un divisor en mayúsculas, todo eso? Así que tal vez deberías importarlo de la ActionList y entonces es sólo un valor en los objetos con ActionList.divider type. Y si ya estás haciendo esto, entonces tal vez esto es ActionList.divider, donde, ya sabes, ActionList.divider es un objeto que es un detalle interno que sabe cómo renderizar el divisor. Esto se siente como un buen equilibrio donde estamos ocultando el detalle de implementación del divisor. Nadie necesita saber que hay un tipo divisor. Todo lo que haces es poner un ActionList.divider allí. Se siente bien. OK, sigamos. Siguiente caso de uso, algunos de estos son destructivos.

QnA

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.
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.
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
TypeScript y React: Secretos de un matrimonio feliz
React Advanced Conference 2022React Advanced Conference 2022
21 min
TypeScript y React: Secretos de un matrimonio feliz
Top Content
TypeScript y React son inseparables. ¿Cuál es el secreto de su exitosa unión? Bastante código extrañamente extraño. Aprende por qué useRef siempre se siente extraño, cómo manejar los genéricos en los hooks personalizados y cómo los tipos de unión pueden transformar tus componentes.
Depuración de JS
React Summit 2023React Summit 2023
24 min
Depuración de JS
Top Content
Como desarrolladores, pasamos gran parte de nuestro tiempo depurando aplicaciones, a menudo código que ni siquiera escribimos. Lamentablemente, a pocos desarrolladores se les ha enseñado cómo abordar la depuración, es algo que la mayoría de nosotros aprendemos a través de la experiencia dolorosa. La buena noticia es que _puedes_ aprender a depurar de manera efectiva, y hay varias técnicas y herramientas clave que puedes usar para depurar aplicaciones de JS y React.
Principios para Escalar el Desarrollo de Aplicaciones Frontend
React Summit 2023React Summit 2023
26 min
Principios para Escalar el Desarrollo de Aplicaciones Frontend
Top Content
Después de pasar más de una década en Google, y ahora como el CTO de Vercel, Malte Ubl no es ajeno a ser responsable de la infraestructura de software de un equipo. Sin embargo, estar a cargo de definir cómo las personas escriben software, y a su vez, construir la infraestructura que están utilizando para escribir dicho software, presenta desafíos significativos. Esta presentación de Malte Ubl revelará los principios guía para liderar una gran infraestructura de software.

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
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
Construye un Tablero Rico en Datos y Hermoso con la Rejilla de Datos de MUI X y Joy UI
React Summit 2023React Summit 2023
137 min
Construye un Tablero Rico en Datos y Hermoso con la Rejilla de Datos de MUI X y Joy UI
Top Content
WorkshopFree
Sam Sycamore
Siriwat (Jun) Kunaporn
2 authors
Aprende cómo utilizar el ecosistema completo de MUI para construir un tablero de gestión de proyectos hermoso y sofisticado en una fracción del tiempo que tomaría construirlo desde cero. En particular, veremos cómo integrar la Rejilla de Datos de MUI X con Joy UI, nuestra biblioteca de componentes más nueva y hermana del estándar de la industria Material UI.
Tabla de contenidos:- Presentando nuestro proyecto y herramientas- Configuración de la aplicación e instalación del paquete- Construcción del tablero- Prototipado, estilos y temas - Características de Joy UI- Filtrado, ordenación, edición - Características de la Rejilla de Datos- Conclusión, pensamientos finales, P&R