ASP.NET MVC Session vs Global vs Cache
J'ai une application qui a été écrit à la vanille ASP.NET que j'aimerais port à ASP.NET MVC.
Cependant, je suis confus au sujet au bon endroit pour conserver les objets. J'ai besoin de persister pour un couple de raisons:
- Je voudrais tous avoir un unique connexion de base de données, enveloppé dans un "référentiel" ou "gestionnaire" style d'objet.
- Chaque utilisateur dispose d'un objet utilisateur doit être enregistré sur une session par session.
Normalement, je dirais que #1 serait enregistré comme un élément statique dans les variables Globales.asax qui peut être frappé à l'aide de Global.Repository
ou similaire.
Et je dirais normalement que 2 doit être une propriété avec une session de sauvegarde de stocker quelque part dans la classe de base des pages.
Maintenant la raison pour laquelle je suis confus, c'est que j'ai entendu dire que les séances ont changé dans MVC, et le Global.asax ne détient plus de la même classe. Aussi, le concept de pages a été supprimé, ajout d'une propriété à la classe de base d'un contrôleur semble... mal.
Qu'en dites-yall?
OriginalL'auteur John Gietzen | 2009-05-27
Vous devez vous connecter pour publier un commentaire.
Votre base de données serait d'aller dans une classe de base pour vos contrôleurs. Cette classe de base doit s'étendre Contrôleur, et tous vos contrôleurs doit étendre la classe de base. Voici un petit exemple:
Avis le plus paresseux de l'instanciation. Cela me permet de me faufiler en avant l'exécution de tests et de mettre mon champs privés avec des simulacres.
Comme pour la session, vos objet Utilisateur peut encore être sauvé dans la session classique ASP.NET application. Presque tout est toujours dans les parages (Réponse, le Cache de Session, etc), mais certains d'entre eux ont été emballés avec des classes de Système.Web.Les Abstractions de sorte qu'ils peuvent être moqué pour les tests. Tous, ils continuent de se comporter de la même manière, mais vous ne devriez pas utiliser certains d'entre eux dans leur rôle traditionnel (p. ex., ne pas la Réponse.Rediriger, de retour d'un ActionResult comme RedirectToRouteResult qui effectue votre redirection).
Comme pour le raisonnement derrière vos questions....
Ne pas insister sur une seule connexion db. Selon votre application, il peut même être une mauvaise idée, que les demandes peuvent faire un pas les uns sur les autres. Il suffit d'ouvrir votre connex, de l'utiliser et d'en disposer/fermer lorsque vous avez terminé.
Aussi, l'un des plus grands changements que MVC apporte est le rejet de la dynamique du modèle traditionnel ASP.NET a tenté de ramener au développement web. Tous les de ce cadre et de l'état d'affichage n'existe plus (ne faites pas attention à l'homme derrière le rideau). Le moins que l'état vous de tenir sur la moins complexe et la plus robuste de votre application web. Essayez, vous aimerez peut-être.
Étapes de bébé...... Vous devez répondre avec un exemple de cela.
J'utilise en fait le regroupement de connexion. De toute façon, merci. C'est presque exactement ce que j'ai été la planification, bon à savoir que je suis assez proche de meilleures pratiques.
OriginalL'auteur Will
Si vous utilisez des sessions, je recommanderais une séance de classe, de sorte que vous avez seulement besoin de spécifier le nom de chaîne, une fois dans le code et cela vous donnera l'IntelliSence aussi.
OriginalL'auteur Tony Borf
Sessions n'ont pas changé dans MVC. Le GlobalApplication de classe Mondiale.asax existe toujours, trop. Il existe des Pages, aussi, que vous voulez vous référer à un référentiel dans un contrôleur plutôt que d'une page. Ajout d'une propriété à une classe controller de base est très bien, je le fais tout le temps.
OriginalL'auteur Craig Stuntz
Vous pouvez créer un modèle de classeur pour encapsuler l'état.
(Voir Steve Sanderson mvc livre sur son panier de mise en œuvre)
Avec le modèle de classeur, vous avez accès à la controllerContext - qui a le HttpContext.
OriginalL'auteur Steve