12
votes

Responsentiel statique ASP.NET MVC?

J'ai quelques entités qui ne changeront pas à peu près (c'est-à-dire une liste de pays, régions, etc.) et cela m'a fait penser ... Un référentiel statique a du sens pour ces entités en plus des référentiels normaux? Je dis en outre, parce que ces entités interagiront toujours avec d'autres entités, et je les souhaite toujours sous une seule unité de travail afin de partager le même contexte.

Cependant, je suis sûr qu'il y a une meilleure façon d'y aller. Je suis nouveau sur ASP.NET et le Cadre .NET, mais y a-t-il un moyen de définir des données à l'échelle de l'application qui seront utilisées tout au long de la vie du programme? Est-ce la meilleure façon d'y aller?

ou est-il préférable de définir simplement une classe statique avec des collections de ces entités et je peux simplement les attraper de là quand j'en ai besoin?


0 commentaires

3 Réponses :


3
votes

Pourquoi ne pas simplement utiliser un mécanisme de mise en cache? J'ai utilisé Memchache avec succès dans des situations comme celle-ci.


3 commentaires

Hmmm, seriez-vous prêt à me diriger vers un article et / ou un blog qui discute de ce mécanisme?


Ce gars a un très bon post sur la configuration et l'utilisation. Il est en fait assez facile à utiliser. danhume.com/home/blogpost/memcached -Pour-c ---- A-Navigation / 62


ASP.NET Appfabric Caching est une chose semblable à Memcached mais à partir de Microsoft et disponible sur Azure, alors peut-être mieux en fonction de votre environnement d'hébergement.



8
votes

Vous pouvez utiliser diverses techniques de stockage (gestion de l'état). Suivez ci-dessous les options pour plus d'informations.


3 commentaires

Merci! En effet, ces entités ne seront pas intenses de mémoire. Va utiliser system.web.httpcontext.current.cachette pour stocker un dictionnaire. Une autre question: quand serait un bon moment pour le stocker? Pendant la demande de candidature dans global.asax?


Oui, cela peut également être un endroit pour stocker les données ou dans votre code de contrôleur, car l'objet de cache d'application est disponible dans toute l'application.


Maintenant que j'y pense, cela a plus de sens dans le contrôleur. Au moins à mes besoins. Merci.



2
votes

Je pense que la réponse de Nexus23 couvre la majorité de vos options. Mais je trouve pour certaines données telles que celles-ci (États-Unis, villes) parfois de son mieux pour ne pas conserver une liste du tout comme il vous suffit de faire face à l'avenir. La convivialité sage a également une liste de 190 pays et plus de 190 pays (les États-Unis et les États-Unis reconnaissent que différentes listes) n'est pas idéal pour un utilisateur à faire défiler.

L'utilisateur de l'application saura probablement ce qui est correct mieux que vous de toute façon que vous ne prévoyez de mettre à jour avec les changements géopolitiques du monde.

Si vous avez besoin de cette liste pour des fonctions telles que la validation d'adresse ou la géolocalisation, il est préférable de différer à un service qui est destiné à cela au lieu d'essayer de se retrouver en interne (API Google Maps, etc.).


3 commentaires

"La convivialité sage également d'avoir une liste de 190 pays et plus de 190 pays (l'ONU et les États-Unis reconnaissent que différentes listes) n'est pas idéal pour un utilisateur de faire défiler." Doivent totalement être en désaccord ici. GB est le code de pays du Royaume-Uni, mais si vous laissez cela à l'utilisateur, ils vont essayer d'entrer au Royaume-Uni ou de nombreuses autres données incorrectes, puis vous ne pouvez même pas dire que ce sont des personnes dans le même pays.


Ouais, je ne le laisserais pas être libre sans validation, mais l'argument de la facilité d'utilisation est bien documenté , pour la validation, utilisez l'API Google Maps ou quelque chose qui peut également normaliser, puis vous n'avez pas besoin de suivre le flux RSS des Nations Unies et d'obtenir des mises à jour de pays dans votre liste.


Que vous utilisiez une liste déroulante ou si un autocomplete est à vous de décider. Mais appliquer une contrainte référentielle dans la base de données est une dernière étape nécessaire pour conserver votre sain d'esprit de données et que Google Maps n'est pas disponible là-bas. Peut-être que c'est juste un moment depuis que je n'avais pas à gérer les changements géopolitiques.