41 votes

Mise en cache d'objets de données lors de l'utilisation de Repository / Service Pattern et de MVC

J'ai un MVC basé sur le site, qui utilise un espace de stockage/Service de motif pour l'accès aux données. Les Services sont écrites à l'aide dans la majorité des applications (console, winform, et sur le web). Actuellement, les contrôleurs de communiquer directement avec les services. Cela a limité la capacité d'appliquer la bonne mise en cache.

Je vois mes options suivantes:

  • Écrire un wrapper pour l'application web, qui met en œuvre la IWhatEverService qui ne cache.
  • Appliquer la mise en cache dans chaque contrôleur de cache de la ViewData pour chaque Action.
  • Ne vous inquiétez pas de mise en cache des données et de mettre en œuvre OutputCaching pour chaque Action.

Je peux voir les avantages et les inconvénients de chacun. Qu'est-ce que/doit la meilleure pratique pour la mise en cache avec Dépôt/Service

34voto

Brendan Enrick Points 2892

Steve Smith a fait deux grands messages de blog qui démontrent comment utiliser son CachedRepository modèle à atteindre le résultat que vous recherchez.

http://stevesmithblog.com/blog/introducing-the-cachedrepository-pattern/

http://stevesmithblog.com/blog/building-a-cachedrepository-via-strategy-pattern/

Dans ces deux postes, il vous montre comment mettre en place ce modèle et explique aussi pourquoi il est utile. En utilisant ce modèle, vous obtenez la mise en cache sans votre code existant en voir la mise en cache de la logique. Essentiellement, vous utilisez le cache référentiel comme si c'était un autre référentiel.

18voto

Will Points 76760

Le moyen le plus simple consiste à gérer la mise en cache dans votre fournisseur de référentiel. De cette façon, vous ne devez changer aucun code dans le reste de votre application. il sera inconscient du fait que les données ont été servies à partir d'un cache plutôt que du référentiel.

Donc, je créerais une interface que les contrôleurs utiliseraient pour communiquer avec le backend, et dans la mise en œuvre de cela, j'ajouterais la logique de mise en cache. Enveloppez le tout dans un bel arc avec quelques DI, et votre application sera configurée pour des tests faciles.

2voto

Hrvoje Points 4248

Vérifier ma mise en œuvre du service de mise en cache:
http://stackoverflow.com/questions/343899/how-to-cache-data-in-a-mvc-application#349111
(Je ne veux pas répéter la réponse ici ...)
N'hésitez pas à commenter!

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X