Salesforce est une expérience plutôt pénible pour développer autre chose que les applications les plus simples. Salesforce a une idée très précise de ce que l'on peut développer, et si votre application ne se situe pas dans ces limites, évitez-la !
Les limites du gouverneur sont vraiment pitoyables : récursion à 16 niveaux, 1 meg de tas, pas plus de 200 objets retournés par une requête, pas plus de 20 requêtes en une seule invocation. 10 appels web dans une invocation, 1000 éléments dans une liste unique, et ainsi de suite. Le résultat final est que toutes les astuces que vous trouvez pour contourner une limite se heurtent à une autre.
Une fois que vous atteignez une certaine taille, tout votre temps sera consacré à coder autour de ces limitations. Le langage, Apex, ne supporte pas vraiment d'héritage significatif. Même des tâches apparemment simples finissent par prendre des jours lorsque l'on rencontre de nouvelles limitations apparemment arbitraires. Par exemple, tous les objets dans Apex héritent de SObject
Cependant, il n'est pas permis d'instancier une collection de modules génériques. SObject
ce qui rend pratiquement impossible la création de bibliothèques utilitaires utiles. Les jointures complexes (même plutôt simples) de bases de données ne sont pas possibles.
L'outillage et le support pour Salesforce sont également extrêmement faibles. Ils ne sont pas dignes de confiance et sont difficiles à utiliser dans le cadre de véritables processus de développement. Le déploiement est un cauchemar, car les outils ont d'énormes difficultés à résoudre les problèmes de dépendance complexes, et de nombreuses entités créées au cours d'un développement normal NE PEUVENT tout simplement PAS être déployées par programme. D'autres petites caractéristiques sont également délicieuses, comme le fait que le langage est insensible à la casse, mais que l'IDE est sensible à la casse. Il n'y a pas d'outils de refactoring à proprement parler, vous avez donc toute la douleur d'un langage à typage statique, sans aucun des avantages supposés. Et le temps de sauvegarde/compilation est élevé, je vois fréquemment des temps de plus de 2 minutes. Et, bien sûr, si vous avez plusieurs erreurs de compilation en une seule sauvegarde (et ce sera le cas, puisque vous ne voudrez pas recompiler chaque changement, avec ces 2 minutes d'attente...) vous n'aurez qu'une seule erreur à la fois !
Dans le même ordre d'idées, vous semblez avoir remarqué que la documentation de Salesforce est plutôt auto-congratulatoire - eh bien, c'est comme ça jusqu'au bout. Il n'y a aucune mention, même dans les références techniques les plus sombres, des erreurs courantes, ou même des limites d'une api ou d'une fonctionnalité donnée. Tout n'est que "voici la chose géniale que vous pouvez faire" et aucune mention de "mais vous pourriez imaginer que cela ferait aussi ___, mais vous auriez tort ! Tout à fait tort !" La documentation ressemble vraiment à du matériel de marketing jusqu'au bout. Je programme dans cet environnement depuis plus de 18 mois maintenant, et j'ai encore parfois du mal à trouver les bases, comme la référence API.
Salesforce n'est pas un environnement flexible. Ce n'est pas un environnement de développement rapide (du moins comparé à tout autre cadre de programmation Web existant). Ce n'est pas un bon environnement pour construire autre chose que des applications jouets comme celles qu'ils montrent dans leurs tutoriels. Dites simplement non.