Samedi le 13 mars 2010 . 19:49

Les meilleures pratiques pour NHibernate

Samedi, 15 novembre 2008, 15:42
Cet article a été publié dans Développement et a 4 commentaires à ce jour .

J’utilise NHibernate depuis quelques années déjà. La grande majorité des projets en .net que je développe tirent profit de ce fantastique ORM. NHibernate est probablement le plus complexe des ORM, mais aussi le plus complet. Et avec l’abandon de LINQ 2 SQL par Microsoft, NHibernate est à mon avis le meilleur choix. D’autant plus que la version 2.1 devrait offrir un support complet pour LINQ (via un wrapper LINQ 2 NHibernate).

Si je vous parle NHibernate aujourd’hui, c’est surtout parce que je suis conscient que pour les non-initiés, NHibernate peut paraître complexe. Quoiqu’il existe beaucoup de tutoriels sur le Web, la plupart d’entre eux sont assez simples et ne font que survoler l’architecture requise pour bien tirer avantage de NHibernate. Notamment vis à vis la gestion des sessions et des transactions.

Ainsi, il existe une référence qui porte sur ces aspects et je ne saurais suffisamment vous en recommander la lecture. Il s’agit de l’article NHibernate Best Practices with ASP.Net de Billy McCafferty. L’article présente d’abord les avantages à utiliser un ORM et les bases de l’intégration de NHibernate. Ensuite, il offre plusieurs notions avancées, qui pourront peut-être sembler un peu lourdes pour certains, mais qui sont très intéressantes et surtout essentielles à une bonne utilisation de NHibernate.

Par ailleurs, chacun des thèmes abordés propose des liens et références pour vous permettre de mieux comprendre les différentes notions. Donc, même si vous n’êtes pas à l’aise avec les patterns de Repository et le DDD (Domain-Driven Design), vous serez sûrement en mesure de comprendre l’essentiel.

Je compte éventuellement proposer un petit guide pour l’implantation de NHibernate qui met à profit le pattern Open-Session- In-View pour permettre l’utilisation du lazy-loading de NHibernate. À suivre…

Vous pouvez passer à la fin et laisser une réponse. Les pings ne sont actuellement pas autorisés.

4 Commentaires sur “Les meilleures pratiques pour NHibernate”

  1. jbm
    2008.11.22 08:10

    Je partage ton avis… J’utilise professionnellement nhibernate depuis moins longtemps que toi et la principale difficulté que je rencontre de manière récurente est le bon usage du lazy loading. Je ne sais pas si le pattern Open Session In View répond à ce souci. S’agit’il de pouvoir gérer un contexte d’utilisation de liaison tardive ? Un moyen d’indiquer qu’il faut utiliser ou non une liaison tardive dans certaines situations contrairement à l’usage défini dans le mapping ?

  2. 2008.11.24 09:01

    Je ne suis pas certain de bien comprendre ta question… En fait, le lazy-loading est une fonctionnalité qui permet de charger les collections d’un objet (qui sont explicitement marquées avec lazy=”true” dans les mappings) uniquement lorsque l’application a besoin d’accéder à leur état.

    Le pattern Open-In-Session-View permet d’utiliser cette fonctionnalité avec les WebForms (asp.net). Dans ce pattern, comme je l’explique dans mon nouvel article, une session NHibernate correspond à une requête http.

    Donc, si aucun accès à une collection marquée comme lazy n’est fait durant une requête http, la collection ne sera pas initialisée.

  3. jbm
    2008.11.28 05:15

    Merci pour ta réponse. C’est bien ce que je voulais savoir.
    Au travail on utilise nhibernate.burrow pour la synchro entre la session hibernate et celle d’asp.net. Le lazy-loading ne pose donc pas de souci grâce à elle.
    Merci pour tes articles, bonne continuation.

  4. 2008.11.28 09:00

    De rien! En fait, nhibernate.burrow implante sensiblement les mêmes méthodes présentées dans mon article sur la gestion des sessions NHibernate. Sauf que burrow a une fonctionnalité supplémentaire qui permet d’étaler une “conversation” sur plusieurs requêtes http.

Laisser un commentaire