Je viens de commencer à apprendre NHibernate.Couplage ASP.NET MVC et NHibernate
Au cours des derniers mois, j'ai utilisé IoC/DI (structuremap) et le modèle de dépôt, ce qui a rendu mes applications beaucoup plus lâches et plus faciles à tester. Lors de la commutation de ma couche de persistance à NHibernate, j'ai décidé de rester avec mes dépôts. Actuellement, je crée une nouvelle session sur chaque appel de méthode, mais bien sûr cela signifie que je ne peux pas bénéficier d'un chargement paresseux.
Par conséquent, je souhaite implémenter session-per-request mais ce faisant, cela rendra mon projet web dépendant de NHibernate (ce n'est peut-être pas une si mauvaise chose?). Je prévoyais d'injecter ISession dans mes dépôts et de créer et d'éliminer des sessions sur des événements de demande de début/fin d'appel (voir http://ayende.com/Blog/archive/2009/08/05/do-you-need-a-framework.aspx)
Est-ce une bonne approche? Vraisemblablement, je ne peux pas utiliser session-per-request sans faire référence à NHibernate dans mon projet web? Avoir le projet web dépendant de NHibernate m'invite à ma (prochaine) question suivante - pourquoi même s'embêter avec le référentiel? Puisque mon application web appelle des services qui parlent aux dépôts, pourquoi ne pas abandonner les dépôts et simplement ajouter mon code de persistance NHibernate dans les services? Et enfin, est-il vraiment nécessaire de se diviser en autant de projets? Un projet web et un projet d'infrastructure sont-ils suffisants?
Je me rends compte que je me suis un peu éloigné de ma question initiale, mais il semble que tout le monde semble avoir sa propre opinion sur ces sujets. Certaines personnes utilisent le modèle de référentiel avec NHibernate, d'autres non. Certaines personnes collent leurs fichiers de mapping avec les classes associées, d'autres ont un projet séparé pour cela.
Un grand merci, Ben
Je viens de commencer à utiliser MVC ... et honnêtement, je ne vois aucune utilité pour le chargement paresseux dans la vue. Je m'assure juste que les champs appropriés sont chargés avec impatience. Les choses de l'OMI sont beaucoup plus simples si la portée de la session reste à l'intérieur de la méthode d'action. – dotjoe
Il peut ne pas être utile dans la vue, mais il est certainement utile dans les services utilisés pour créer le modèle de vue, et il permet d'économiser de la complexité dans la couche du référentiel. Un exemple serait un ordre qui a beaucoup de lignes de commande.Sur une page affichant une liste ou des commandes, je ne voudrais pas charger avec impatience chaque ligne de commande. Cependant, quand j'ai percé dans l'ordre je voudrais les lignes de commande. Utiliser un chargement paresseux me permet d'avoir un seul référentiel d'Ordres et signifie que je n'ai pas besoin de méthodes de dépôt supplémentaires pour charger les lignes de commande. –
Juste une note sur l'étendue de la session - qu'en est-il d'une page contenant plusieurs vues partielles rendues par différentes actions (par exemple en utilisant RenderAction). Sûrement il serait préférable pour ceux-ci d'enregistrer la même session (par demande de page) que d'avoir une session par action? –