Dans l’écosystème Salesforce, chaque ligne de code compte. Une mauvaise pratique peut transformer votre solution en cauchemar : performances dégradées, limites governor atteintes, erreurs imprévisibles. Pour vous éviter ces pièges, voici les 15 anti-patterns Apex que nous croisons trop souvent, et surtout comment les éliminer.

1. Requêtes SOQL dans les boucles

Pourquoi c’est un problème : Chaque exécution de requête SOQL consomme des limites Salesforce. Une requête dans une boucle peut rapidement dépasser le plafond autorisé.

Exemple à éviter :

for(Account acc : accounts) {
    List<Contact> contacts = [SELECT Id FROM Contact WHERE AccountId = :acc.Id];
}

Bonne pratique : Récupérez tous les contacts en une seule requête, puis mappez-les.


2. DML non bulkifié

Problème : Chaque opération DML consomme une part des limites governor (150 DML max par transaction). Si vous insérez, mettez à jour ou supprimez des enregistrements dans une boucle, vous risquez d’atteindre ces limites rapidement, provoquant des erreurs en production.

À éviter :

for(Lead lead : leads) {
    insert lead;
}

Préférez :

insert leads;

3. Requêtes sans filtres WHERE

Problème : Lancer une requête sans filtre récupère potentiellement des milliers d’enregistrements, saturant la mémoire (heap size) ou provoquant des timeouts, surtout sur des orgs avec un fort volume de données.

À éviter :

List<Opportunity> opps = [SELECT Id FROM Opportunity];

Préférez : Toujours filtrer et limiter le résultat.


List<Opportunity> opps = [SELECT Id FROM Opportunity WHERE StageName = ‘Prospecting’];


4. Absence de gestion des collections vides

Problème : Risque d’erreur si la collection est nulle ou vide.

Bonne pratique :

if(accounts == null || accounts.isEmpty()) return;

5. Triggers sans framework

Problème : Code spaghetti difficile à maintenir.

Bonne pratique : Utiliser un handler centralisé pour organiser la logique métier.


6. Utilisation d’IDs hardcodés

Problème : Les IDs changent entre les environnements. Risque de bugs lors des déploiements.

Bonne pratique : Utiliser les noms ou des Custom Settings.


7. Exceptions non gérées

Problème : Les erreurs passent inaperçues, rendant le débogage complexe.

Bonne pratique :

try {
    update records;
} catch(DmlException e) {
    // Gérer ou logger l’erreur
}

8. Requêtes non optimisées pour les index

Problème : Les requêtes qui ne s’appuient pas sur des champs indexés sont lentes.

Bonne pratique : Filtrer sur des champs indexés dès que possible.


9. Formules complexes inutiles

Problème : Les formules calculées à la volée peuvent ralentir l’affichage ou les traitements.

Astuce : Privilégier les champs calculés ou le cache côté serveur si besoin.


10. Mauvaise utilisation des Maps/Sets

Problème : Faire des recherches dans des listes à l’intérieur d’autres listes rend le traitement très lent quand il y a beaucoup de données.

Bonne pratique : Utiliser des Maps pour accéder rapidement aux données liées.


11. Requêtes Apex sans LIMIT

Problème : Risque de récupérer trop de données.

Bonne pratique : Toujours limiter le nombre de résultats.


12. Gestion insuffisante des permissions

Problème : Exposer des données sensibles ou bypasser les règles de partage.

Bonne pratique :

[SELECT Id FROM Account WITH SECURITY_ENFORCED]

13. Variables statiques mal gérées

Problème : Risque de comportements inattendus lors de l’exécution de triggers multiples.

Bonne pratique : Encapsuler et contrôler l’utilisation des variables statiques.


14. Callouts synchrones sans gestion d’erreur

Problème : Les erreurs réseau non capturées peuvent interrompre le traitement.

Bonne pratique : Toujours entourer les callouts d’un try/catch.


15. Tests unitaires superficiels

Problème : Une bonne couverture ne garantit pas la qualité des tests.

Bonne pratique : Écrire des tests qui valident les cas d’erreur et les comportements attendus.


Conclusion

Ces 15 anti-patterns sont les ennemis de la performance, de la robustesse et de l’évolutivité de vos solutions Salesforce. Les connaître, c’est déjà limiter les risques. Les éviter, c’est garantir des projets fiables, maintenables et scalables.

Chez Dev First, nous accompagnons nos clients pour sécuriser et optimiser leurs développements Salesforce, en appliquant ces bonnes pratiques à chaque projet.

Besoin d’un regard d’expert sur vos projets Salesforce ou de conseils personnalisés ?
Contactez-nous sur contact@dev-first.com ou découvrez nos offres sur dev-first.com.


Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *