Pourquoi le modèle de référentiel est-il nécessaire dans NHibernate?

13

Je lis le formulaire officiel de votre première application basée sur NHibernate .

Bien que le didacticiel soit bon et facile à suivre, je me demande pourquoi le modèle de référentiel est utilisé.

Dans les divers Add, Update, les Removeméthodes dans la ProductRepositorymise en œuvre, le code est presque identique - elles sont toutes les transactions en utilisant, et la différence est dans la « viande » -à- dire l' appel session.Saveint la Addméthode, session.Deletedans la removeméthode. ( La page manque d'ancrages HTML, mais vous pouvez rechercher dans la page le code pertinent comme public void Remove,public void Add )

Ce code "se sent mal".

Pourquoi l'auteur utilise-t-il le modèle de référentiel - est-ce juste pour la démonstration de l'utilisation de NHibernate ou est-ce nécessaire ou pour une autre raison?

Ps. Mon expérience vient de Ruby on Rails utilisant ActiveRecord, donc j'essaie de comprendre comment NHibernate fonctionne / est utilisé.

Zabba
la source
1
Si vous préférez le modèle d'enregistrement actif, vous pouvez utiliser Castle Active Record pour vous asseoir sur NHibernate castleproject.org/activerecord
Ben Robinson
3
C'est une question critique. Certains se demandent s'il faut l'utiliser ou non. Ayende a écrit ses arguments pour ne pas l'utiliser dans le référentiel est le nouveau Singleton

Réponses:

10

Le modèle de référentiel n'est pas requis. Comme pour tous les autres modèles, c'est une décision "architecturale" que vous devez prendre en fonction des besoins de votre entreprise. En général, le modèle de référentiel est utilisé pour implémenter "l'Ingority Persistance Ingorance", ce qui signifie que vos entités ne savent rien sur la façon de persister sur votre périphérique de stockage (base de données, XML, TextFile, etc.). Si par exemple vous avez une adresse d'entité, elle ne contiendra pas la logique de persistance (vous ne trouverez nulle part quelque chose comme address.Save ou address.Update) mais vous passerez votre entité à une méthode de référentiel qui est chargée de conserver la changements

Massimiliano Peluso
la source
Je pense que oui et non. La session NHibernate elle-même est une sorte de référentiel générique. Ainsi, l'ajout d'un référentiel supplémentaire n'est en général rien de plus que l'ajout d'une façade à l'objet session.
en fait, ma réponse commence comme "Le modèle de référentiel n'est pas requis ..." cela peut être juste une décision architecturale par rapport aux besoins de l'entreprise, c'est tout
Je suis totalement d'accord là-dessus. Mais je manquais le point que la session elle-même est un référentiel, c'est tout.
9

L'avantage de l'utilisation du modèle de référentiel est de simuler votre couche d'accès aux données, afin que vous puissiez tester le code de votre couche métier sans appeler de code DAL. Il y a d'autres gros avantages mais cela me semble très vital.


la source
2
+1 le modèle ActiveRecord rend très difficile l'isolement du DAL pour la simulation, se terminant généralement par les tests unitaires nécessitant leur propre base de données (auquel cas le test unitaire devient un test d'intégration).
MattDavey