Application-wide Caching in Acumatica with Slots and IPrefetchable (mise en cache au niveau de l'application dans Acumatica avec des slots et IPrefetchable)

Cette semaine, j'écris un article pour mes amis du Acumatica Developer Network sur une technique que j'ai abordée lors de ma session à la dernière Virtual Developer Conference et qui n'est pas très utilisée par les développeurs en dehors de l'équipe de développement d'Acumatica - les slots et l'interface IPrefetchable.
Lors de la surveillance et du profilage d'une application basée sur une base de données, on constate souvent que les mêmes requêtes et les mêmes données sont consultées à maintes reprises par différents modules et utilisateurs de l'application. L'impact de ces requêtes sur les performances peut ne pas être évident au début, surtout si elles sont simples. Cependant, à mesure que le nombre d'utilisateurs et la complexité de votre application augmentent, les effets s'accumulent et finissent par se traduire par une surcharge notable.
Et si vous pouviez charger ces données une seule fois, les mettre en cache et les rendre disponibles à chaque session ? Le framework Acumatica propose un mécanisme appelé "slots". Acumatica fournit une interface spéciale, IPrefetchable, qui permet le chargement paresseux de vos données la première fois qu'elles sont nécessaires et se charge d'invalider votre cache, si et quand les données mises en cache sont modifiées ailleurs dans l'application.
En interne, les emplacements sont utilisés dans de nombreux scénarios. Voici quelques exemples de structures mises en cache dans des slots :
- Droits d'accès
- Plans du site
- Configurations de clés segmentées
- Règles d'escompte AR/AP