Saltar al contenido

Mejores prácticas para Jitterbit App Builder

Introducción

Las aplicaciones de App Builder pueden crecer en tamaño y complejidad, frecuentemente involucrando el trabajo de varios desarrolladores durante muchos meses o años. Estas mejores prácticas te ayudarán a gestionar esta complejidad, hacer tus aplicaciones más fáciles de mantener y mantenerlas funcionando con rendimiento óptimo.

El ciclo de vida del desarrollo de aplicaciones

Construye tus aplicaciones iterando sobre las siguientes tareas:

  1. Descubrir

  2. Modelar

  3. Construir y demostrar

  4. Refinar y probar

  5. Desplegar

  6. Mantener

1. Descubrir: Recopilar requisitos

Antes de comenzar a construir una aplicación, debes tener un esquema de lo que hará y quién la usará. Aquí hay algunas ideas sobre cómo puedes obtener esta información:

  • Escucha y aprende: Organiza talleres presenciales y sesiones de diseño para entender quién usará la aplicación y qué debe hacer.

  • Identifica información clave: Recopila y documenta los requisitos principales para datos, personas usuarias, procesos empresariales y acceso y seguridad.

  • Evita suposiciones: Haz preguntas para que el usuario de la aplicación piense críticamente sobre lo que te pide que construyas. Cuestiona la lógica y el razonamiento detrás de los procesos empresariales de tus usuarios.

  • Confirma tu comprensión: Lee de nuevo tu comprensión de los requisitos con tus usuarios de la aplicación y otros interesados. Utiliza diagramas de flujo y otras herramientas visuales para comunicar mejor las necesidades técnicas con usuarios no técnicos.

2. Modelar: Diseña la base

Un modelo de datos sólido es la base de una aplicación exitosa. Está dispuesto a dedicar tiempo a este paso para evitar un trabajo significativo más adelante.

  • Crea un diagrama entidad-relación (DER): Un DER documenta tu modelo de datos, facilitando la comprensión de estructuras de tablas y relaciones. Proporciona una experiencia similar a una pizarra donde puedes hacer cambios fácilmente antes de confirmarlos en la base de datos. El siguiente es un ejemplo de un DER simple:

    erDiagram
     Student {
         UUID student_id PK "Student ID"
         string name
     }
       Course {
         UUID course_id PK "Course ID"
         string title
     }
       Enrollment {
         UUID enrollment_id PK "Enrollment ID"
         UUID student_id FK "Student ID"
         UUID course_id FK "Course ID"
         string grade
     }
     Student ||--o{ Enrollment : "takes"
     Course ||--o{ Enrollment : "has"
  • Diseña elementos fundamentales: Además del modelo de datos, crea diagramas de flujo, diagramas de carril, wireframes y mapas del sitio según sea necesario para desarrollar el diseño de la aplicación.

3. Construir y demostrar: Desarrollo iterativo

Con un diseño sólido en su lugar, puedes comenzar a construir la aplicación.

  • Construye en capas: Desarrolla tu aplicación en capas distintas: Datos, Lógica empresarial e Interfaz de usuario. Construye desde la capa de datos hacia arriba.

  • Define un producto mínimo viable (MVP): Define y enumera los elementos principales de la aplicación y obtén la aprobación de los usuarios de la aplicación antes de comenzar la construcción principal.

  • Demuestra temprano y frecuentemente: Programa demostraciones regulares de las partes funcionales de la aplicación. Esto ayuda a los usuarios a entender qué es posible y a ajustar sus expectativas y requisitos.

4. Refinar y probar: Incorpora comentarios y QA

  • Refina: Incorpora comentarios de las sesiones de demostración para refinar la aplicación y agregar características de diseño de UI/UX más granulares.

  • Prueba: Las pruebas exhaustivas son importantes.

    • QA interno: Siempre realiza pruebas internas primero para detectar errores.

    • UAT del usuario final: Permite que los usuarios de la aplicación realicen Pruebas de aceptación del usuario. Conocen mejor el proceso empresarial y pueden proporcionar comentarios valiosos.

    • Utiliza datos realistas: Utiliza datos de prueba realistas para asegurar que las características se prueben de la manera en que los usuarios finales las usarían.

    • Pruebas positivas y negativas: Prueba tanto los resultados esperados (pruebas positivas) como los comportamientos inesperados (pruebas negativas).

5. Desplegar: Gestión de lanzamientos

  • Empaqueta e instala: Utiliza la Gestión de lanzamientos de App Builder para promover cambios de esquema y actualizaciones de aplicaciones entre entornos. Esto asegura que los cambios se repliquen en el orden correcto y reduce el riesgo de error humano.

  • Lanzamiento inicial: El MVP está activo en producción. El desarrollo generalmente se congela por un corto período para enfocarse en el soporte de producción.

  • Versiones futuras: El proceso de desarrollo se reinicia para nuevas funcionalidades y versiones futuras.

6. Documentar y mantener

  • Documentar el proceso empresarial: Esto es esencial para la transferencia de conocimiento, la incorporación de nuevos desarrolladores y el mantenimiento futuro.

  • Eliminar objetos sin usar: Elimina regularmente tablas, reglas y páginas sin usar para reducir la complejidad de la aplicación y facilitar el trabajo con ella.

  • No dejes cosas rotas: Termina las funcionalidades en las que estés trabajando. Una funcionalidad rota o incompleta genera confusión para otros desarrolladores y es más difícil de completar después.

Capa de datos

Modelado de datos

  • Convenciones de nomenclatura:

    • Usa sustantivos distintos, singulares y descriptivos para las tablas (por ejemplo, Customer, Order). Evita abreviarlos cuando sea posible.

    • Usa UUID para todas las claves primarias y foráneas. Una buena convención de nomenclatura es TableNameID (por ejemplo, CustomerID).

    • Prefija los campos booleanos con "is" (por ejemplo, isActive).

    • Las reglas empresariales tienden a proliferar. Usa convenciones de nomenclatura de reglas empresariales para mantenerlas organizadas.

  • Claves e indexación:

    • Claves primarias de una sola parte: Usa claves primarias UUID de una sola parte. Esto simplifica el modelo de datos y admite automáticamente las capacidades de auditoría completa de App Builder.

    • Indexar columnas: Indexa todas las claves foráneas. También indexa cualquier campo que se use comúnmente para ordenar, filtrar o unir datos para optimizar el rendimiento.

  • Relaciones:

    • Usa tablas puente o de unión para gestionar relaciones de muchos a muchos. Evita diseños planos (agregar múltiples columnas para datos relacionados a una sola tabla), ya que no son escalables.

Diseño de tablas

  • Datos configurables: Diseña tu modelo de datos para que sea configurable. Por ejemplo:

    • Los valores que podrían cambiar con el tiempo (como estados) deben almacenarse en tablas de búsqueda separadas en lugar de estar codificados en la lógica empresarial.

    • Para datos basados en tiempo (como precios), usa una tabla de nivel inferior con rangos de fechas efectivas.

  • Habilitar auditoría: Habilita Auditoría Lite o Auditoría Completa para todas las tablas a fin de rastrear automáticamente los cambios de datos para el historial y el cumplimiento.

  • Definir el uso de tablas: Conforme crees tablas, define su tipo de uso (Datos de desarrollador, Compartidos o Datos de usuario). Esto controla cómo se promocionan los datos entre entornos y es crucial para la gestión de versiones.

  • Valores consistentes: Sé consistente en cómo usas valores como NULL. Un valor NULL debe tener un significado claro y consistente en todo tu modelo de datos.

Tablas de búsqueda y parámetros

  • Tablas de búsqueda: Usa tablas de búsqueda para gestionar listas de valores. Deben incluir lo siguiente:

    • Title: Un valor de visualización legible para humanos. App Builder usa el tipo de uso Title para generar automáticamente controles de lista.

    • Enum: Un valor enumerado estático y legible para humanos. Usar enums en la lógica empresarial es mucho más claro que hacer referencia a un UUID sin procesar.

    • IsActive: Un booleano para controlar qué valores están disponibles para seleccionar en la interfaz de usuario.

    • Index: Una columna de enteros para controlar el orden de clasificación predeterminado de la lista.

  • Tabla de parámetros: Toda aplicación debe tener una tabla de parámetros. Esta es una tabla única que contiene solo un registro y se usa para almacenar configuraciones y constantes globales de la aplicación. Esto evita codificar valores y permite a los administradores cambiarlos a través de la interfaz de usuario.

Conexiones de datos

  • Conexiones seguras: Configura conexiones seguras a fuentes de datos externas.

  • Usar conectores de App Builder: Cuando necesites usar datos de la base de datos de otra aplicación en el mismo servidor, usa un Conector de App Builder. Esto reduce las dependencias de implementación, ya que no necesitas insertar los modelos lógicos y físicos de ambas bases de datos simultáneamente.

Lógica empresarial

Diseño de reglas

  • Conoce los tipos de reglas disponibles: Comprende cuándo usar objetos de negocio (para mostrar datos), validaciones (para verificar datos) y reglas CRUD (para cambiar datos).

  • Mantén las reglas simples: Simplifica cómo se construyen los objetos y las reglas. Usa subconsultas reutilizables siempre que sea posible para evitar duplicar lógica.

  • Lógica basada en datos:

    • Configura más, codifica menos: Almacena valores cambiables en tablas de configuración, no directamente en las reglas. Esto permite actualizaciones fáciles a través de la interfaz sin requerir un desarrollador.

    • Aplica lógica a través del modelo de datos: Construye lógica basada en la configuración de la tabla en lugar de codificar valores. Por ejemplo, usa un campo booleano en una tabla para controlar un proceso en lugar de una declaración IIF con un estado codificado.

  • Usa funciones de manera eficiente: Utiliza las funciones mvSQL integradas de App Builder para tareas comunes.

Convenciones de nomenclatura de reglas de negocio

Una convención de nomenclatura consistente para las reglas de negocio ayuda a mantener aplicaciones complejas. Usa el siguiente patrón general: Destino (Propósito o Subtipo) Descriptor – Filtro Opcional.

Tipo de Regla Patrón de Nomenclatura Ejemplo
Objeto de Negocio (Eventos) {{Destino}} ({{Descriptor}}) Customer (Details)
Objeto de Negocio (Reportes) {{Destino}} ({{Subtipo Caso Especial}}) {{Descriptor}} Customer (Chart) Sales Trend
Lista {{Destino}} (List) {{Descriptor Opcional}} Customer (List)
Subconsulta {{Destino}} (Subquery) {{Descriptor}} Customer (Subquery) Concat Search Term
CRUD/Insert, CRUD/Cram {{Destino}} ({{Subtipo}}) {{Descriptor|Origen}} Customer (Insert) Salesforce
CRUD/Update {{Destino}} ({{Subtipo}}) {{Descriptor|Nombres Campo}} Customer (Update) Standing ID
CRUD/Delete {{Destino}} ({{Subtipo}}) {{Descriptor}} Customer (Delete) No Activity
Predeterminado {{Destino}} (Default) {{NombresCampo}} – {{TablaOrigen}} Customer (Default) AccountStatusID
SQL de Rendimiento {{Destino}} {{Función SQL}} {{Descriptor}} Customer (Group By) Country, State
Validación {{Destino}} (Validation) {{Descriptor}} Customer (Validation) Name too short
Visibilidad {{Destino}} (Visibility) {{Descriptor|Tabla Origen}} Customer (Visibility) CustomerType
Puente {{Destino}} (Bridge) {{Descripción}} Order (Bridge) Failed
Alcance {{Destino}} (Reach) {{Descriptor|Tabla Origen}} Customer (Reach) CustomerType
Webhook {{Destino}} (Webhook) {{Descriptor}} Customer (Webhook) External

Optimización de consultas

  • Selecciona solo las columnas necesarias: Incluye solo las columnas que necesitas en tus reglas.

  • Une por claves: Une tablas usando sus claves UUID para obtener el mejor rendimiento.

  • Uniones inteligentes: Usa el tipo de unión apropiado para tus necesidades. Prefiere usar un único tipo de unión externa (como LEFT JOIN) en una consulta.

  • Optimiza cláusulas WHERE: Evita usar expresiones en ambos lados de un operador de cláusula WHERE, ya que esto puede afectar negativamente el rendimiento.

  • Union al nivel más alto: Al combinar conjuntos de datos, usa UNION al nivel más alto posible en tu consulta para mejor rendimiento.

Eventos y acciones

  • Registra eventos a nivel de tabla: Siempre que sea posible, registra eventos (como validaciones y acciones) a nivel de tabla. Esto permite que otras reglas de negocio hereden esa lógica, proporcionando un único lugar para administrarla.

  • Encadena acciones: Utiliza acciones de éxito y fracaso para vincular múltiples reglas y validaciones en flujos de trabajo complejos de "si esto, entonces aquello".

  • Comprende los desencadenantes: Conoce qué inicia un evento (una acción del sistema o una acción del usuario).

Validaciones

  • Refuerza la calidad de los datos: Utiliza validaciones para asegurar que los datos sean correctos antes de guardarse.

  • Refuerzo en capas: Aplica validaciones a nivel de lógica de negocio o tabla, no solo en la interfaz de usuario, para garantizar la integridad de los datos.

Interfaz de usuario/Experiencia del usuario

Un buen diseño de interfaz de usuario/experiencia del usuario es crítico para el éxito de una aplicación. Una interfaz bien diseñada debe ser intuitiva, eficiente y cómoda para el usuario de la aplicación.

Principios de alto nivel

  • Funcionalidad primero: Enfócate en crear una aplicación funcional antes de refinar el diseño visual. La lógica de negocio y las estructuras de datos pueden cambiar durante el desarrollo, lo que podría requerir rehacer cualquier trabajo de interfaz de usuario prematuro.

  • La consistencia es clave: Todos los elementos, desde botones y fuentes hasta colores y diseño, deben ser consistentes en toda la aplicación. Esto crea una experiencia cómoda y predecible para los usuarios.

  • Mantenlo limpio:

    • Sé generoso con el espacio: No comprimas elementos en la interfaz de usuario. El espaciado adecuado reduce el desorden y la carga cognitiva, haciendo que la información sea más fácil de asimilar.

    • Utiliza estilos sutiles: Usa estilos limpios y modernos. Por ejemplo, las sombras deben ser ligeras y sutiles, no oscuras y abrumadoras (a menos que esa sea tu opción de estilo corporativo).

    • Elimina objetos sin usar: Quita páginas sin usar y otros objetos para reducir la sobrecarga de la aplicación y facilitar el mantenimiento.

Diseño y navegación

  • Elige la navegación correcta:

    • La navegación lateral es generalmente la mejor opción, ya que es responsiva, escalable y puede mostrar claramente una estructura de carpetas/árbol. Es la más adecuada para aplicaciones con muchos elementos de navegación.

    • La navegación superior funciona bien para aplicaciones con muy pocos elementos de nivel superior, donde el espacio de pantalla es una prioridad. No es adecuada para diseño responsivo o submenús profundos.

  • Establece una jerarquía visual: Utiliza tamaño, peso y color para guiar la vista del usuario de la aplicación hacia la información más importante de la página. Los encabezados de panel, subencabezados y contenido deben ser distintos.

  • Simplifica acciones: Dale a los usuarios de tu aplicación un único lugar claro para realizar una acción específica. Evita proporcionar múltiples formas de hacer lo mismo.

  • Organiza contenido:

    • Agrupa contenido: Organiza pantallas complejas con grupos lógicos o pestañas.

    • Vincula paneles: Conecta paneles de interfaz de usuario para que seleccionar un elemento en uno actualice automáticamente la información relacionada en otro.

    • Usa ventanas emergentes correctamente: Utiliza ventanas emergentes para detalles o entrada de datos. Nunca muestres múltiples ventanas emergentes apiladas una encima de la otra.

Entrada del usuario e interacción

  • Diseña botones claros:

    • Texto orientado a acciones: Utiliza verbos de acción en los botones (por ejemplo, "Crear informe", "Guardar para después") en lugar de texto genérico como "Sí" o "No".

    • Jerarquía de botones: Crea una distinción visual clara entre acciones primarias (colores sólidos y audaces) y acciones secundarias (delineadas o menos prominentes).

  • Proporciona mensajes de error útiles: Los mensajes de error deben usar lenguaje simple, identificar claramente el problema y sugerir constructivamente una solución. No confíes únicamente en el color para indicar un error.

  • Utiliza iconos de manera efectiva:

    • Usa etiquetas con iconos reconocibles: Utiliza iconos bien conocidos (como una lupa para búsqueda) en combinación con etiquetas de texto significativas. Muchos iconos no son universalmente entendidos por los usuarios de la aplicación por sí solos.

    • Mantén un estilo consistente: Utiliza iconos que compartan el mismo estilo visual (por ejemplo, relleno, trazo y tamaño).

  • Mejora la entrada de datos:

  • Marca los campos obligatorios: Indica claramente cuáles campos son obligatorios.

    • Usa controles de lista: Ofrece opciones predefinidas para la entrada de datos y garantiza consistencia.
  • Usa el diseñador en vivo: Realiza ajustes de interfaz en tiempo real directamente en la aplicación para refinar rápidamente la experiencia del usuario.

Tipografía y color

  • Usa fuentes legibles y consistentes:

    • Limita las familias de fuentes: Usa no más de dos familias de fuentes. A menudo, una es suficiente.

    • Considera combinaciones de fuentes: Si usas dos fuentes, usa una para encabezados y otra para el texto del cuerpo.

    • Evita mayúsculas sostenidas: No uses mayúsculas sostenidas para el texto del cuerpo, ya que es más lento de leer. Solo debe usarse para alertas cortas o encabezados grandes.

  • Usa una paleta de colores clara:

    • Limita los colores: Apunta a 3 o 4 colores: uno dominante, uno secundario y uno o dos colores de acento.

    • Usa colores semánticos: Usa colores comúnmente asociados para proporcionar información sobre el estado (por ejemplo, rojo para una advertencia, verde para éxito, gris para un botón deshabilitado).

Diseño para accesibilidad

  • Garantiza alto contraste de color: El texto debe tener una relación de contraste alta con su fondo (al menos 4.5:1 para texto normal).

  • Diseña para navegación por teclado: Asegúrate de que todos los formularios y elementos interactivos funcionen para usuarios de aplicaciones que solo pueden navegar por teclado.

  • Asegúrate de que los elementos interactivos sean lo suficientemente grandes: En dispositivos móviles y pantallas táctiles, asegúrate de que los botones, enlaces y otros elementos interactivos sean lo suficientemente grandes para usarse fácilmente. Un tamaño mínimo de 32x32 píxeles es un buen punto de partida.

  • Prueba en dispositivos móviles reales: La mejor manera de confirmar que tu aplicación es realmente responsiva y utilizable es probarla en dispositivos móviles reales, no solo en emuladores de navegador.

Entornos e implementaciones

El enfoque de 3 niveles

Desarrolla tus aplicaciones en instancias de App Builder en al menos estos tres entornos:

  • DEV (Desarrollo): Este entorno permite a los desarrolladores trabajar en nuevas funciones sin afectar a los usuarios. Todas las modificaciones y esfuerzos de desarrollo deben realizarse aquí.

  • QA (Aseguramiento de Calidad): Proporciona a los usuarios de la aplicación un entorno para probar sin afectar a los desarrolladores ni a los datos de producción.

  • PROD (Producción): El entorno activo para los usuarios de la aplicación.

Gestión de cambios y lanzamientos

  • Nunca modifiques QA o PROD directamente: Siempre construye en DEV, promueve a QA para pruebas y luego promueve a PROD después de la aprobación de QA. Hacer cambios directamente en entornos superiores puede desincronizar tus sistemas y poner en riesgo futuras implementaciones.

  • Usa la gestión de lanzamientos de App Builder: Esto garantiza que cualquier cambio que hayas realizado en DEV se replique a QA y PROD en el mismo orden, evitando errores humanos.

  • Respalda bases de datos: Siempre realiza una copia de seguridad de la base de datos de tus entornos antes de una implementación de aplicación o una actualización de versión de App Builder.

  • Registros de cambios descriptivos: Cierra los registros de gestión de cambios con frecuencia y sé descriptivo sobre qué cambió. Esto facilita la revisión de cambios históricos si necesitas solucionar un problema.

  • Planifica implementaciones: Sé metódico al mover aplicaciones a producción y establece expectativas con anticipación. Planifica implementaciones después del horario comercial para minimizar el impacto.

Para obtener orientación sobre la planificación de actualizaciones de versión de plataforma en estos entornos, incluidas estrategias in situ y Blue/Green, consulta Estrategias de actualización de producción.

Seguridad de la aplicación

  • Usa proveedores de seguridad: Siempre que sea posible, usa un proveedor de seguridad para autenticación. No asignes seguridad manualmente.

  • Acceso basado en roles (RBAC): Asigna roles a los usuarios de la aplicación para controlar el acceso a páginas y acciones. Los elementos de interfaz pueden configurarse para adaptarse según el rol del usuario de la aplicación.

  • Gestión eficiente de grupos: Organiza los usuarios de la aplicación en grupos para simplificar la administración de permisos.

  • Seguridad a nivel de fila: Usa reglas de alcance para mostrar diferentes subconjuntos de datos a diferentes usuarios de la aplicación en la misma pantalla.

  • Integra SSO: Usa el inicio de sesión único (SSO) para una autenticación de usuarios simplificada y segura.

Sistemas de notificación

  • Notificaciones bidireccionales: Diseña notificaciones para que los usuarios de la aplicación puedan responder con opciones que actualicen los datos de la aplicación.

  • Contenido personalizado: Usa datos dinámicos en los mensajes para notificaciones personalizadas.

  • Vincula a páginas públicas: Asegúrate de que cualquier página de la aplicación vinculada desde una notificación sea accesible públicamente.

  • Activadores consistentes: Registra notificaciones a nivel de tabla para un activación confiable.

  • Mensajes configurables por el usuario: Permite que los usuarios de la aplicación modifiquen el texto de notificación a través de la interfaz de usuario. Esto reduce la necesidad de intervención del desarrollador para cambios de texto simples.