Blue Canvas
Planes
EN|ESContáctanosAccederComenzar
Consejos para desarrolladores

Mejores prácticas de Apex: escalabilidad y gestión del código

Descubre mejores prácticas comprobadas de Apex. Crea bases de código escalables y ágiles para mejorar el rendimiento de Salesforce.

Randalyn Hill-CofferPor Randalyn Hill-Coffer·Revisado por el equipo de Blue Canvas·8 de enero de 2025·22 min de lectura

En este artículo, te ofreceremos consejos prácticos sobre cómo estructurar tu código Apex para que sea escalable y fácil de mantener. Aprenderás principios fundamentales como la claridad del código, la estandarización, la reutilización y la importancia de que cada clase tenga una única responsabilidad, además de cómo usar eficazmente herramientas y procesos como Visual Studio Code y un proceso de desarrollo basado en Git.

Estas son nuestras 5 conclusiones clave:

  • Estructura tu base de código Apex con un enfoque de diseño modular, separando responsabilidades y favoreciendo la escalabilidad y la facilidad de mantenimiento.
  • Prioriza la reutilización del código creando bibliotecas reutilizables, aprovechando la herencia e implementando interfaces.
  • Usa espacios de nombres, paquetes y sistemas de control de versiones para gestionar dependencias y facilitar una colaboración eficiente entre desarrolladores.
  • Implementa estándares y pautas de programación para garantizar una calidad y legibilidad uniformes en toda la base de código.
  • Revisa y refactoriza tu base de código periódicamente para identificar y resolver posibles cuellos de botella, mejorar el rendimiento y mantener la agilidad a medida que tu proyecto crece.
En este artículo
  • Cómo superar los desafíos del desarrollo en Apex
  • Por qué debes priorizar el control de versiones para Apex
  • Optimización para un desarrollo eficiente: principios a seguir
  • Cómo aprovechar el desarrollo basado en Git para Apex
  • Usa Visual Studio Code y configúralo bien
  • Proceso de desarrollo basado en Git
  • Establece una guía de estilo de código
  • Cómo elegir patrones de diseño para la arquitectura de código de Salesforce
  • Patrones de diseño útiles para Apex
  • Patrones de triggers de Apex
  • Crea solo un trigger por objeto
  • Mantén la lógica de negocio fuera de los triggers / Usa el patrón de controlador de triggers
  • Clases de servicio de Apex
  • Clases de utilidades y auxiliares de Apex
  • El patrón de «Configuración unificada de la organización»
  • ¡Es hora de llevar tu desarrollo en Apex al siguiente nivel!
  • Preguntas frecuentes

Cómo superar los desafíos del desarrollo en Apex

Apex es, sin duda, una de las funciones más potentes de Salesforce. También es una de las formas más fáciles de generar rápidamente deuda técnica en tu organización de Salesforce. Tras más de una década trabajando como ingeniero y arquitecto de Salesforce, he tenido la oportunidad de explorar bases de código Apex en decenas de organizaciones con distintos niveles de madurez. Y, la mayoría de las veces, lo que encuentro al revisarlas por primera vez es un completo desorden:

  • Varios triggers para el mismo objeto con funcionalidades superpuestas.
  • Archivos de triggers enormes con la lógica de negocio y la lógica de filtrado de registros amontonadas en un gran bloque monolítico.
  • Fragmentos de código repetitivo copiados y pegados entre clases y métodos en toda la base de código.
  • Valores constantes críticos codificados directamente en Apex (como ID de tipos de registro, direcciones de correo de administradores, ID de usuarios, URL de API y más).
  • Una mezcla de nombres de archivos indescifrables como “qtrReportSummaryCont.cls” y “CoTrig_v4_JakeApr15.trigger”
  • Código que se ha editado tantas veces en la consola de desarrollador que ya no tiene ningún patrón de sangría reconocible.

Algunos de estos problemas pueden parecer bastante inofensivos, pero no lo son. Se acumulan con el tiempo y generan código excesivo y indicios de problemas en el código (más ejemplos de indicios de problemas en el código). Con el tiempo, esto afecta a los usuarios con errores, pérdida de datos, dificultades para desplegar nuevas funciones e incluso pequeñas «rebeliones» en las que equipos enteros se rinden y vuelven a realizar ciertas tareas en hojas de cálculo.

La buena noticia es que existen muchas buenas prácticas fáciles de seguir y patrones de diseño rápidos de implementar que pueden ahorrarle tiempo a tu equipo y facilitar la gestión de toda tu implementación de Salesforce. A continuación, encontrarás una recopilación de consejos profesionales, ejemplos y fragmentos de código que te ayudarán a sentar una base sólida para tu trabajo de desarrollo en Apex.

Adoptar estas prácticas puede ayudar a un equipo pequeño a lograr más y evitar que un equipo grande se pierda en los detalles.

Antes de empezar: ¿usas control de versiones?

Por qué debes priorizar el control de versiones para Apex

¿Llevas un seguimiento de tu código Apex en un sistema de control de versiones (como GitHub o herramientas de control de versiones específicas para SFDC como Blue Canvas)? Si aún no llevas un seguimiento de tu código Apex en algún repositorio basado en Git, deja de leer este artículo, resuelve ese problema primero y luego vuelve.

El control de versiones es la primera herramienta y la más importante de tu conjunto de herramientas. Si no lo usas actualmente, estás trabajando a ciegas. Sin la capacidad de realizar revisiones de código en cada cambio que llega a producción, te resultará difícil implementar incluso las buenas prácticas más básicas. Y sin historiales detallados de cambios en tu base de código, depurar problemas de forma retrospectiva es prácticamente imposible.

¿Tienes tu control de versiones en orden? Excelente, sigamos.

Optimización para un desarrollo eficiente: principios a seguir

Todas las recomendaciones de este artículo se basan en un conjunto de principios básicos:

  • Prioriza la claridad: El objetivo principal de toda esta planificación es optimizar el trabajo para lograr un desarrollo eficiente. Necesitas poder entender tu código de un vistazo y depurar problemas rápidamente. Y debes poder desplegar mejoras sin tener que rastrear enormes rutas de ejecución ni revisar páginas y páginas de código.
  • La legibilidad es lo primero: Uno de nuestros recursos más valiosos es el código legible. Un buen formato y nombres de variables y funciones comprensibles no buscan que el código se vea «bonito». Su objetivo es reducir el tiempo que necesita un desarrollador nuevo (o tú dentro de 6 meses) para entender qué hace un fragmento de código.
  • Estandariza constantemente: Nuestro repositorio de Git es nuestra fuente de referencia y revisiones de código en las solicitudes de despliegue o de incorporación de cambios son nuestra principal forma de garantizar la calidad. Reducir el ruido en Git causado por cambios ajenos al objetivo (como correcciones de sangría o de nombres de variables) es clave para lograrlo. Para ello, seguimos procedimientos estándar y buscamos un nivel razonable de uniformidad entre desarrolladores.
  • Mantén tu código DRY: No te repitas, diseña tu base de código para que reutilizarlo sea lo más fácil posible.
  • Cada clase hace una sola cosa: Apex es un lenguaje orientado a objetos, y una de las decisiones clave en las que podemos equivocarnos es cómo y cuándo crear (o no crear) abstracciones. El Principio de responsabilidad única es una herramienta potente y todos los integrantes del equipo deberían conocerla.

Cómo aprovechar el desarrollo basado en Git para Apex

Todo comienza con las herramientas que usamos para hacer nuestro trabajo y la forma en que lo abordamos.

Usa Visual Studio Code y configúralo bien

Esto puede ser complicado para algunos equipos. Muchos desarrolladores de Salesforce se han acostumbrado a desarrollar con la consola de desarrollador integrada de Salesforce. Quizás tú también seas uno de ellos. Otros desarrolladores comenzaron a usar Sublime Text con MavensMate hace tiempo y han intentado seguir usando esa herramienta a pesar de que dejó de estar disponible.

Hazte un favor y cámbiate a Visual Studio Code con las extensiones oficiales de Salesforce. Y asegúrate de que todas las personas que escriben código para tu organización hagan lo mismo. Configurarlo puede ser un poco complicado (consejo: elige una JVM que no sea de Oracle) pero solo tienes que hacerlo una vez, ¡y vale la pena! Solo sigue las instrucciones aquí u obtén esta insignia en Trailhead.

¿Por qué es importante?

  • Formato de código / Ruido en Git: La consola de desarrollador web suele alterar la sangría de todos los archivos que toca. Esto dificulta mantener la coherencia y genera decenas o incluso cientos de cambios en los espacios en blanco que añaden ruido a tu repositorio de Git.
  • Eficiencia del desarrollo: VS Code tiene muchísimas funciones que reducen los errores, acortan el tiempo de desarrollo y facilitan la aplicación de estándares de código. Desde múltiples cursores para amplia variedad de atajos de teclado (versión para Windows aquí) hasta el autocompletado de código hasta la enorme comunidad de extensiones, puede ahorrarle a tu equipo varios días de desarrollo a lo largo de un año.
  • Estandarización: Las extensiones de VS Code para desarrollar en Apex las crea el propio Salesforce y son la forma estándar de desarrollar código en la plataforma Salesforce. Al usar las herramientas estándar, es más fácil buscar soluciones en Google y obtener ayuda de la comunidad.

Ya que estás en eso, aprovecha las funciones de VS Code para aplicar un par de estándares clave:

  • Sangría: Elige un nivel y un carácter de sangría estándar (lo más común son 2 espacios) y asegúrate de que todos en tu equipo cambien su configuración de VS Code para establecer esta opción como predeterminada.
  • Longitud de línea: Elige una longitud de línea estándar (lo más común son 100 caracteres) y pide a tu equipo que actualice su configuración de VS Code para añadir una regla en esa columna.

Nota: Sí hay casos en los que conviene usar la consola de desarrollador; simplemente no la uses para escribir código de producción. Ejecutar scripts puntuales con el ejecutor de código Apex de la consola de desarrollador está perfectamente bien (aunque herramientas como SoqlX hacen un mejor trabajo). La interfaz de ejecución y cobertura de pruebas de la consola de desarrollador también es muy útil.

Proceso de desarrollo basado en Git

Como se explicó en la introducción, el corazón de cualquier proceso de desarrollo de software escalable es tu sistema de control de versiones. Llevar un registro de tu código Apex en un sistema de control de versiones (como GitHub o Blue Canvas) es el primer paso. Pero para aprovechar las ventajas operativas de un sistema más organizado, tendrás que poner tu repositorio de Git en el centro del flujo de trabajo de tu equipo.

Estos artículos sobre desarrollo en Salesforce del equipo de Blue Canvas son un excelente punto de partida:

  • Qué hacen los mejores equipos de desarrollo y administración de Salesforce
  • Cómo implementar CI con Salesforce

Después puedes buscar otros “flujos de trabajo de Git” (empieza por la documentación de GitHub flow) y determinar qué enfoque funciona mejor para tu equipo. Algunas de las preguntas clave que tendrás que resolver son:

  • ¿Los administradores usarán tu sistema de control de versiones para enviar actualizaciones o solo lo harán los desarrolladores?
  • ¿Qué tipos de cambios pasarán por una revisión de código y cuáles, si los hay, se podrán hacer directamente en producción?
  • ¿Quién realizará las revisiones de código? ¿Qué proceso deberá seguir?

Establece una guía de estilo de código

Cada desarrollador escribe y da formato al código de manera un poco diferente, y eso está bien. Pero cierto nivel de coherencia en el código te ayudará a acelerar el desarrollo y evitar errores. La forma más sencilla de lograrlo es adoptar una guía de estilo de código y asegurarte de que todos en tu equipo se comprometan a seguirla.

Puedes crear tu propia guía de estilo si quieres, pero ahorrarás mucho tiempo si usas una guía existente como punto de partida. La mejor guía de estilo específica para Apex que he encontrado es un proyecto de código abierto creado por el equipo de NimbleAMS. La guía está aquí: Guía de estilo de Apex de NimbleUser. Se adaptó de Guía de estilo de Java de Google. Para más detalles, consulta la publicación original del lanzamiento de Nimble en 2017 .

Cómo elegir patrones de diseño para la arquitectura de código de Salesforce

Cada archivo de Apex en tu organización debe tener una única responsabilidad bien definida. Por lo tanto, tu objetivo al diseñar una arquitectura de código de Salesforce es crear un catálogo de distintos tipos de archivos de Apex con funciones claramente definidas y patrones de diseño bien pensados que los conecten. Así, cuando llegue el momento de desarrollar una nueva funcionalidad, no tendrás que diseñar una nueva arquitectura. Solo tendrás que elegir los patrones adecuados del catálogo y completarlos con lógica de negocio real.

Hay muchísimas opciones en cuanto a patrones de Salesforce (basta con buscar en Google “patrones de diseño de Apex” o “patrones empresariales de Apex”). En esta sección presento un resumen de algunos de los patrones más útiles que he encontrado. Sin embargo, cada organización es un poco distinta, así que es importante analizar tu caso de uso particular para determinar qué patrones son adecuados para tu situación.

                                                                                                                                                                                                                                                   
Tipo de códigoEjemplosNotas
TriggersCaseTriggers.triggerUn trigger por objeto. Consulta: “Patrones de triggers de Apex”
Manejadores de triggersCaseTriggerHandlers.clsUna clase manejadora por trigger de objeto. Consulta: “Patrones de triggers de Apex”
Otros manejadoresEmailHandlers.cls, OpportunityActionHandlers.clsPuedes usar el patrón de manejadores para cualquier tipo de lógica de gestión de eventos. Recuerda mantener la lógica de negocio fuera de los propios manejadores. Colócala en clases de servicio.

Para los manejadores de correo entrante, puedes crear una única clase manejadora con clases internas para cada correo entrante que necesites gestionar.

Para las acciones invocables de Apex, usa un manejador de acciones por objeto.
ServiciosCaseService.clsUna clase de servicio por objeto. Consulta: “Clases de servicio de Apex”
Clases auxiliares / UtilidadesApiHelpers.cls, DateTimeUtilities.clsUna clase por área funcional, sin relación con objetos específicos. Consulta: “Clases auxiliares y de utilidades de Apex”
Bibliotecas de objetosCompanyGpsSearch.cls, FinanceObjects.cls, CampaignAnalytics.clsAl desarrollar lógica de negocio compleja, suele ser útil crear una “clase de biblioteca” orientada a objetos que encapsule la lógica de negocio de un dominio temático específico. Las clases de biblioteca deben tener nombres adecuados y límites claramente definidos para que no se conviertan en depósitos de código desorganizado.

Este tipo de clase se diferencia de una clase auxiliar, de utilidades o de servicio porque su diseño está orientado a objetos y suele contener varias clases internas de objetos con relaciones entre ellas.

Los objetos de las clases internas pueden corresponder a objetos personalizados de Salesforce o a alguna otra abstracción útil (como días de la semana o categorías de productos). La biblioteca también puede tener métodos estáticos de nivel superior que devuelvan o procesen instancias de los objetos de la biblioteca.
ControladoresSalesDashboardController.cls, AccountWidgetController.clsUna clase por página de Visualforce o componente de Lightning.

Advertencia: evita usar un único controlador para varias páginas o componentes. Compartir controladores genera código sobredimensionado y dificulta la comprensión de las clases de prueba. En su lugar, crea un controlador para cada página o componente y usa clases de servicio para mantener el código sin repeticiones (DRY).
Clientes de APIGoogleCalendarAPI.cls, GoogleAPI.cls, IntercomAPI.clsEn general, una clase por servicio de terceros. Si integras servicios de proveedores grandes con múltiples API (como Google o AWS), puede convenirte tener un cliente de API compartido a nivel de proveedor que gestione la autenticación y el envío y análisis de solicitudes, y luego clases separadas para cada API.
SimulacionesGoogleCalendarAPIMock.cls, GoogleAPIMock.clsHay muchas formas de probar el código de tu cliente de API. La opción más flexible y fácil de mantener es crear clases de simulación con la interfaz HttpCalloutMock.

Debes tener una clase de simulación por cada clase de cliente de API.
API REST personalizadasApiProjectsV1.cls, ApiSupportPortalContactsV2.clsUna clase por recurso de API versionado.

Cada clase implementa todos los verbos de un único recurso de API REST (que idealmente corresponde a un objeto estándar o personalizado de Salesforce).

¡Asegúrate de versionar los endpoints y las clases de tu API! El versionado te da la libertad de implementar cambios incompatibles en el futuro y, al mismo tiempo, mantener la compatibilidad con versiones anteriores. Así, “ApiProjectsV1” correspondería a una ruta REST como “/v1/projects/*”.

Si tienes varios conjuntos de API, también puede convenirte usar el nombre de la propia API como prefijo. Así, la V2 de la “Support Portal API” podría tener clases como “ApiSupportPortalContactsV2” y “ApiSupportPortalCasesV2”.
PruebasCaseTriggerTests.cls, CaseServiceTests.cls, ApiHelperTests.cls, GoogleCalendarAPITests.cls, ApiProjectsV1Tests.clsUna clase de prueba por cada clase que no sea de prueba. También puede convenirte tener algunas clases de “pruebas de integración” enfocadas en probar varias clases a la vez.

Las pruebas de Apex pueden desorganizarse rápidamente, por lo que es importante tener una forma sencilla y estandarizada de estructurarlas. Mi estrategia favorita es usar un modelo uno a uno, en el que cada clase o trigger tenga exactamente una clase de prueba correspondiente con un nombre de archivo coincidente. (Consejo práctico: conviene definir cómo debe usar tu equipo el plural en los nombres de archivo; de lo contrario, cada desarrollador terminará haciéndolo de una manera distinta. Por ejemplo: “AccountTriggerTests” frente a “AccountTriggersTest”, “AccountTriggerTest” o “AccountTriggersTests”.)

Procura que las clases de prueba se centren, en la medida de lo posible, únicamente en el código de esa clase específica. Esto es especialmente importante y complejo al distinguir entre pruebas de triggers, pruebas de manejadores de triggers y pruebas de servicios.
Batch / Schedulable / QueueableAwsS3Uploader.cls, SalesReportScheduler.clsLas incluyo aquí para que la lista esté completa. Pero las clases que implementan Batchable, Schedulable y Queueable son bastante fáciles de estructurar, ya que, por definición, cuentan con una interfaz predefinida. Suelo nombrarlas con algún sustantivo que indique quién realiza la acción, pero no he encontrado otra convención de nombres más estricta que tenga sentido.

‍

Planificar un poco tus patrones de diseño al principio ahorra mucho tiempo a largo plazo.

Patrones de diseño útiles para Apex

Como mencioné antes, hay muchísimos patrones de diseño entre los cuales elegir al desarrollar una implementación de Apex. Esta sección se centra en algunos patrones que me han resultado indispensables para mantener una base de código escalable.

Patrones de triggers de Apex

Existen muchas corrientes de pensamiento sobre cómo estructurar los triggers de Apex, pero la mayoría coincide en algunos puntos.

Crea solo un trigger por objeto

Tener varios triggers hace imposible controlar el orden de ejecución, dificulta seguir la ruta de ejecución durante la depuración y genera ineficiencia en general. Puedes leer más aquí.

Mantén la lógica de negocio fuera de los triggers / Usa el patrón de controlador de triggers

Si colocas lógica de negocio directamente en tus triggers, resulta imposible crear pruebas unitarias individuales para cada fragmento de código. Esto genera código desordenado y difícil de mantener. Los triggers con lógica también infringen el principio de responsabilidad única y fomentan la creación de código no reutilizable. El patrón de triggers sin lógica resuelve todo esto.

Técnicamente, hay muchas formas de implementar triggers sin lógica, pero la más popular es usar el patrón de manejador de triggers. Este patrón consiste en convertir cada trigger en un bloque de código estándar que invoca una clase manejadora de triggers, la cual, a su vez, se encarga de la lógica de filtrado de registros. La clase manejadora no modifica por sí misma el estado de la base de datos; solo filtra registros y llama a clases auxiliares.

Aquí tienes una versión muy sencilla de cómo se ve esto en código real:

‍

Este patrón es sumamente útil para escribir triggers claros y fáciles de entender. Muchas personas mencionan la capacidad de probar cada unidad de forma aislada como una ventaja clave de este patrón, lo cual es cierto. Pero resulta aún más útil la claridad que se obtiene al organizar la lógica de filtrado de tus triggers en torno a eventos específicos (before insert, after delete, etc.). Tener un método independiente para cada evento del trigger hace que tu código sea mucho más fácil de entender y depurar.

Más lecturas sobre este tema:

  • Stack Overflow: Manejador de triggers, ¿cuál es su propósito?
  • Chris Alridge: Framework ligero de triggers de Apex

Clases de servicio de Apex

El patrón de capa de servicios es una herramienta muy potente que puede ayudar a un equipo a priorizar decididamente el código reutilizable. Si este concepto es nuevo para tu equipo, la insignia de capa de servicios en Trailhead es un excelente punto de partida. El patrón subyacente es antiguo y tiene una larga trayectoria en muchos lenguajes de programación (incluido Java).

Una vez que adoptas la idea, la implementación es bastante sencilla. El enfoque recomendado es crear una única clase de servicio para cada objeto de Salesforce para el que tengas código (“AccountService.cls”, “CampaignMemberService.cls”, etc.). Dentro de esa clase, creas métodos estáticos que implementan distintos fragmentos de lógica de negocio. Tu principal criterio de diseño es intentar que los propios métodos de servicio sean lo más reutilizables posible. ¡Mantenlos genéricos!

Si te interesa conocer la diferencia entre una clase de servicio y una clase auxiliar o de utilidades, sigue leyendo la siguiente sección.

Clases de utilidades y auxiliares de Apex

El patrón de clases auxiliares o de utilidades es considerado por algunos como un antipatrón. Aun así, es un patrón común que vale la pena mencionar. Y, por si sirve de algo, creo que se puede utilizar sin introducir indicios de problemas de diseño en el código.

Por lo que he observado en la comunidad de desarrollo de Salesforce, la gran diferencia entre una clase de servicio y una clase auxiliar o de utilidades es que la primera se centra en un único objeto estándar o personalizado, mientras que la segunda se enfoca en un área funcional concreta que puede ser útil para el código de muchos objetos diferentes. Algunos ejemplos son “DateTimeHelpers” para métodos comunes de manipulación de fechas y horas, “TestUtilities” para lógica reutilizable de métodos de prueba y “ApiHelpers” para métodos que ayudan a analizar, serializar y deserializar solicitudes y respuestas de API.

Por supuesto, la distinción entre una clase de servicio y una clase auxiliar o de utilidades es en gran medida semántica, y he visto muchos contraejemplos que desafían una clasificación simple.

Sea cual sea el estándar que elijas, la conclusión que te propongo es que resulta útil distinguir entre las clases que contienen lógica reutilizable para objetos específicos de Salesforce (“clases de servicio”) y las que se centran en otras abstracciones no basadas en SObject (“clases auxiliares” o “clases de utilidades”).

Si hay vas a tener clases auxiliares o de utilidades, aquí tienes algunos consejos:

  • Asegúrate de que cada clase se enfoque en algo muy específico. ¿JsonHelpers? ¡Excelente! ¿MiscUtilities? Prepárate para un enorme caos de código sin relación entre sí.
  • Mantén un único lugar donde documentar todos los métodos auxiliares disponibles y mantenlo actualizado. Agrega la verificación de “actualizaciones de documentación” a tu proceso de revisión de código cuando se implementen cambios en clases auxiliares o de utilidades.
  • Establece algún proceso para dar a conocer los nuevos métodos auxiliares (una sesión de aprendizaje durante el almuerzo del equipo, anuncios mensuales en Slack, videos cortos que demuestren cada método, etc.). En definitiva, tu objetivo es fomentar la reutilización del código, y eso requiere trabajar en la dinámica del equipo.

El patrón de «Configuración unificada de la organización»

El último patrón que mencionaré es uno para el que no he visto que nadie haya creado un nombre llamativo, así que lo llamaré patrón de configuración unificada de la organización. Este patrón trata sobre cómo gestionamos los valores constantes en el código Apex.

Cuando escribimos Apex, con frecuencia necesitamos usar valores que, aunque sean constantes durante un tiempo, podrían necesitar cambios más adelante. Por lo general, son datos no sensibles, como identificadores de tipos de registro, valores predeterminados de campos, direcciones de correo de administradores, identificadores de usuarios o colas, URLs de API, ajustes de procesos por lotes, etc. (También pueden ser valores sensibles, como claves de API; hablaremos de eso más adelante).

Aquí tienes un desglose de las soluciones más comunes para almacenar y gestionar constantes de Apex, de peor a mejor:

  • Técnica 1: Escribe el valor de forma fija directamente en tu código Apex. Espero que esto sea evidente, pero es una muy mala práctica porque los futuros desarrolladores tendrán que revisar el código línea por línea para encontrar todos los ajustes disponibles. Ocultar valores constantes en lo profundo de tu código también aumenta la probabilidad de errores de inconsistencia, en los que un valor se cambia en un lugar pero no en otro. Además, esta técnica no es adecuada para valores sensibles, como claves de API.
  • Técnica 2: Crea una variable constante al principio del archivo Apex. Esta técnica representa una enorme mejora. Al crear una sección de “Configuración” al principio del archivo y agregar variables estáticas de clase con nombres claros (junto con comentarios que expliquen para qué sirve cada variable), hemos hecho que el código sea mucho más fácil de mantener. Aun así, no podemos usar esta técnica para almacenar valores sensibles. Pero el mayor problema es que modificar estas constantes sigue requiriendo implementar una actualización del código subyacente. ¿Qué pasa si queremos que las personas que no son desarrolladoras puedan hacer estos cambios por su cuenta? ¿Y si necesitamos alternar con frecuencia ciertos ajustes entre distintos valores en producción?
  • Técnica 3: Crea un objeto de configuración personalizada o de metadatos personalizados. ¡Ahora sí estamos avanzando! Al usar configuraciones personalizadas o Metadatos personalizados estamos creando una interfaz de administración que permite a cualquier persona con los permisos adecuados reconfigurar el comportamiento de nuestro código más adelante; además, podemos almacenar valores sensibles, como claves de API. Esta técnica resuelve muchos de los problemas de la técnica #2, pero también genera algunos problemas nuevos que pueden ser difíciles de controlar.

Algunos problemas comunes al usar configuraciones personalizadas de Salesforce:

  • El gran problema de las configuraciones personalizadas es que tendemos a crear distintos objetos de configuración personalizada para cada nuevo fragmento de código. Eso provoca una proliferación de objetos de configuración aislados que son difíciles de documentar y gestionar.
  • Además, al depender de objetos de configuración personalizada independientes para cada fragmento de código, hacemos que a los desarrolladores les resulte más difícil aplicar esta buena práctica. Crear un nuevo objeto de configuración personalizada y agregarlo a tu código es un proceso de 5+ pasos. Y crear los registros de configuración dentro de los métodos de prueba de Apex añade aún más fricción. Cuando tienen poco tiempo, los desarrolladores inevitablemente toman atajos y vuelven a las constantes codificadas de forma fija, lo que nos deja lidiando con las desventajas de la técnica #2.
  • Por último, están los problemas de visibilidad y facilidad para encontrar los ajustes. La técnica #2 tenía sus problemas, pero era realmente excelente en términos de autodocumentación. Tener una sección de “Configuración” al principio de cada archivo Apex con explicaciones claras de cada constante configurable es una muy buena práctica. La técnica #3 facilitó el cambio de los ajustes, pero nos hizo retroceder un poco en cuanto a visibilidad al ocultar los distintos ajustes del código dentro de los métodos de las clases (donde se consultan los objetos de configuración personalizada).

El patrón de configuración unificada de la organización

La solución ideal utiliza configuraciones personalizadas, pero simplifica la experiencia de desarrollo y facilita que los administradores gestionen los ajustes de forma centralizada. Esta solución también garantiza que cada archivo Apex documente por sí mismo qué configuraciones personalizadas utiliza. Así funciona:

  • Crea un único objeto de configuración personalizada llamado “Org_Setting__c”. Debe ser de tipo lista (en lugar de jerárquico). Usaremos el campo estándar “Name” como identificador único principal de cada ajuste.
  • Agrega dos campos personalizados al objeto de configuración:
  • Value__c → Este es un campo de texto con la longitud máxima permitida de 255 caracteres. Almacenará el valor del ajuste. Una clase de servicio facilitará la conversión del valor a otros formatos (como listas, enteros y fechas).
  • Notes__c → Este es un campo de área de texto que se usa para explicar a los administradores cómo completar y gestionar este ajuste.
  • Consejo experto:
  • Si quieres admitir valores de más de 255 caracteres, una estrategia es agregar más campos de valor (Value_2__c, Value_3__c) y hacer que los métodos de tu clase de servicio los concatenen automáticamente.
  • Crea una clase “OrgSettingService” con métodos que faciliten guardar y recuperar valores de configuración con una sola línea de código. Asegúrate de incluir valores predeterminados para que el código que la utiliza siga funcionando aunque el ajuste especificado no exista.
  • Para cada archivo Apex que tenga ajustes: crea una sección de “Configuración” al principio con constantes para el nombre y el valor predeterminado de cada ajuste. Luego, dentro de la lógica de negocio, usa el método adecuado del servicio de configuración de la organización para recuperar los valores.
  • En los métodos de prueba de Apex: puedes usar los métodos auxiliares de configuración de la organización para definir los ajustes durante la preparación de las pruebas.

Aquí tienes un ejemplo de código para comenzar:

El patrón de configuración unificada de la organización reduce la fricción para que los desarrolladores implementen configuraciones personalizadas en su código. También hace que el código sea más legible al incorporar una sección de “Configuración” que se documenta por sí misma al principio de cada archivo Apex. Por último, simplifica la experiencia de administración al reunir todos los ajustes de Apex en una única lista unificada.

¡Es hora de llevar tu desarrollo en Apex al siguiente nivel!

Apex de Salesforce es una herramienta increíblemente potente para el desarrollo de software empresarial. Pero un gran poder conlleva una gran responsabilidad. El código Apex que no escala es un peligro real, pero los patrones y las prácticas anteriores son un excelente punto de partida para diseñar la arquitectura de tu base de código Apex con miras a la escalabilidad y la facilidad de mantenimiento.

Un último consejo: la comunidad de desarrollo de Salesforce es maravillosa y ofrece mucho apoyo, pero a veces también puede ser un poco cerrada. Mientras desarrollas tu propio conjunto de buenas prácticas, no tengas miedo de buscar inspiración en otras comunidades y conjuntos de tecnologías. Algunos de los mejores consejos sobre Salesforce que he recibido provienen de ingenieros de aplicaciones web con experiencia que nunca han escrito una línea de Apex. Una buena arquitectura es universal.

Sobre el autor
Hank Holiday es un desarrollador sénior de Salesforce con más de 10 años de experiencia escribiendo código Salesforce en organizaciones grandes y pequeñas. Puedes ponerte en contacto con él y compartir tus comentarios @hankish en Twitter.

A medida que te familiarices con las buenas prácticas de desarrollo en Apex, descubre cómo nuestras Herramientas de implementación de Salesforce también pueden ayudarte a acelerar tu ciclo de implementación. Blue Canvas ofrece potentes herramientas de control de versiones e integración continua diseñadas específicamente para el desarrollo en Salesforce. Con Blue Canvas, puedes hacer seguimiento de los cambios, colaborar eficazmente y garantizar la integridad de tu base de código durante todo el proceso de desarrollo y entre organizaciones. Empieza con Blue Canvas hoy ¡y lleva tus operaciones de Salesforce al siguiente nivel!

‍

--------

Preguntas frecuentes

¿Por qué es importante estructurar y gestionar la base de código Apex para lograr escalabilidad y agilidad?

  • Estructurar y gestionar la base de código Apex para lograr escalabilidad y agilidad es fundamental porque facilita el mantenimiento, la reutilización y el escalamiento del código. Ayuda a los equipos a entender y explorar el código fácilmente, reduce la deuda técnica, mejora la eficiencia del desarrollo y garantiza una base sólida para futuras mejoras y cambios.

¿Cuáles son algunos desafíos comunes al gestionar una base de código Apex?

  • Algunos desafíos comunes al gestionar una base de código Apex incluyen mantener la coherencia del código, gestionar el código duplicado y las dependencias entre componentes, abordar la acumulación de deuda técnica y garantizar una colaboración eficiente entre los miembros del equipo.

¿Cómo puedo optimizar la claridad y la legibilidad de mi código Apex?

  • Para optimizar la claridad y la legibilidad, sigue buenas prácticas como respetar una guía de estilo de código coherente, usar nombres descriptivos para variables y métodos, organizar el código en unidades lógicas (clases, disparadores y manejadores), agregar comentarios y documentación cuando sea necesario y aprovechar patrones de diseño que mejoren la estructura y la modularidad del código.

¿Hay alguna herramienta de desarrollo recomendada para programar en Apex?

  • Sí, el artículo sugiere usar Visual Studio Code con las extensiones oficiales de Salesforce. Visual Studio Code ofrece funciones potentes, como formato de código, autocompletado, capacidades de depuración y una amplia biblioteca de extensiones. Mejora la productividad de los desarrolladores, ayuda a cumplir los estándares de código y se alinea con las herramientas estándar recomendadas por Salesforce.

¿Cómo puede beneficiar el control de versiones al desarrollo en Apex?

  • El control de versiones, mediante herramientas como Blue Canvas o GitHub, ofrece varios beneficios para el desarrollo en Apex. Te permite hacer seguimiento de los cambios, colaborar eficazmente con los miembros del equipo, volver a versiones anteriores si es necesario, realizar revisiones de código, garantizar la calidad del código y facilitar procesos de implementación fluidos.

¿Qué es el patrón de configuración unificada de la organización?

  • El patrón de configuración unificada de la organización es una técnica para gestionar valores constantes en el código Apex. Consiste en crear un único objeto de configuración personalizada, como "Org_Setting__c", para almacenar valores configurables. Este patrón centraliza la gestión de constantes, simplifica las actualizaciones administrativas, facilita el mantenimiento del código y ofrece un enfoque autodocumentado para hacer seguimiento de distintas configuraciones y utilizarlas.

¿Cómo puede ayudar Blue Canvas a gestionar la base de código Apex?

  • Blue Canvas es una plataforma de control de versiones e integración continua diseñada específicamente para el desarrollo en Salesforce. Ofrece funciones como control de versiones, gestión de ramas, implementaciones automatizadas, flujos de revisión de código y herramientas de colaboración. Blue Canvas simplifica la gestión del código, garantiza la coordinación del equipo y mejora la escalabilidad y la agilidad de tu base de código Apex.

¿Puedo implementar estas buenas prácticas en una base de código Apex existente?

  • Sí, puedes implementar estas buenas prácticas en una base de código Apex existente. Aunque puede requerir cierta refactorización y algunos ajustes, adoptar estas prácticas de forma gradual puede mejorar la estructura, la facilidad de mantenimiento y la escalabilidad de tu base de código. Es importante planificar y comunicar los cambios a tu equipo y considerar el posible impacto en las funcionalidades existentes.

¿Estas buenas prácticas se aplican solo a implementaciones de Salesforce a gran escala?

  • No, estas buenas prácticas se aplican a implementaciones de Salesforce de todos los tamaños. Aunque son especialmente útiles para proyectos a gran escala, incluso las implementaciones pequeñas y medianas pueden beneficiarse de organizar el código, seguir estándares de programación, aprovechar patrones de diseño e implementar prácticas eficientes de gestión del código. Estas prácticas ayudan a crear una base sólida para el crecimiento y la facilidad de mantenimiento, sin importar la escala del proyecto.

Comentarios

Deja un comentario

Boletín
Consejos de DevOps para Salesforce en tu correo

Nuevas publicaciones, lanzamientos y guías prácticas. Sin spam; cancela tu suscripción cuando quieras.

ÍNDICE
  • Cómo superar los desafíos del desarrollo en Apex
  • Por qué debes priorizar el control de versiones para Apex
  • Optimización para un desarrollo eficiente: principios a seguir
  • Cómo aprovechar el desarrollo basado en Git para Apex
  • Usa Visual Studio Code y configúralo bien
  • Proceso de desarrollo basado en Git
  • Establece una guía de estilo de código
  • Cómo elegir patrones de diseño para la arquitectura de código de Salesforce
  • Patrones de diseño útiles para Apex
  • Patrones de triggers de Apex
  • Crea solo un trigger por objeto
  • Mantén la lógica de negocio fuera de los triggers / Usa el patrón de controlador de triggers
  • Clases de servicio de Apex
  • Clases de utilidades y auxiliares de Apex
  • El patrón de «Configuración unificada de la organización»
  • ¡Es hora de llevar tu desarrollo en Apex al siguiente nivel!
  • Preguntas frecuentes
También te puede interesar
Tendencias en Blue Canvas
Hablemos de tu configuración de Salesforce

Obtén una demostración específica o una cotización a tu medida

Agenda una consultaSolicita una cotización
Historias de clientes
Equipos reales, resultados reales
Sysco
Sysco
Dejó atrás Jenkins y redujo los despliegues de horas a minutos
Twilio
Twilio
Ahorró 2–3 días por sprint mientras ampliaba el equipo rápidamente
Catalyst Consulting
Catalyst Consulting
La ciudad de Chicago ahorra horas cada día con revisiones de código y despliegues estructurados
También podrían interesarte nuestras otras publicaciones...
Leer más
Salesforce DevOps
Kenji Sano | 6 de octubre de 2026
Las 8 mejores herramientas de implementación de Salesforce en 2026

Compara las 8 mejores herramientas y descubre cuál se adapta a tu equipo.

Read more
Salesforce DevOps
Kenji Sano | 6 de octubre de 2026
Las 9 mejores agencias de Salesforce en México en 2026

Comparamos 9 agencias y consultoras Salesforce en México por experiencia, especialización y capacidad. Además, qué preguntar sobre DevOps antes de contratar.

Leer más
Arquitectura y recursos
Randalyn Hill-Coffer | 5 de octubre de 2026
Las 19 principales herramientas de operaciones académicas para instituciones de educación superior que usan Salesforce en 2027

Compara 19 herramientas de operaciones académicas y áreas relacionadas para instituciones de educación superior que usan Salesforce en 2027. Descubre cuáles funcionan en Salesforce, cuáles se conectan a través de tu SIS y dónde podrías necesitar una integración.

Blue Canvas

DevOps de Salesforce para equipos. Control de versiones basado en Git, copias de seguridad de metadatos y despliegue continuo.

(786) 591-0702

Certificación SOC 2Socio de SalesforceSalesforce AppExchange

Despliegue en Salesforce

  • Herramientas de despliegue
  • Para metadatos de Salesforce
  • Para datos de CPQ

Producto

  • Funcionalidades
  • Seguridad
  • Historias de clientes
  • Precios

Recursos

  • Documentación
  • Blog
  • Operaciones académicas
  • Encuesta Anthropic x Salesforce
  • Socios
  • Integraciones
  • Gestión de lanzamientos

Empresa

  • Quiénes somos
  • Contáctanos
  • Empleo
  • X (Twitter)
  • LinkedIn
  • GitHub
Mantente al día
Novedades del producto

Recibe las últimas funcionalidades, lanzamientos y análisis técnicos detallados directamente en tu correo.

Seguridad y privacidad

·

Sin spam. Cancela tu suscripción cuando quieras.

© 2026 Blue Canvas. Todos los derechos reservados.

Política de privacidadTérminos de uso