Perché è necessario il modello di repository in NHibernate?


13

Sto leggendo la Tua prima applicazione basata su NHibernate ufficiale .

Mentre il tutorial è buono e facile da seguire, mi chiedo perché venga utilizzato il modello di repository.

Nelle varie Add, Update, Removemetodi nella ProductRepositoryattuazione, il codice è quasi identico - insieme utilizzando operazioni, e la differenza è nella "carne" cioè chiamata session.Saveint il Addmetodo, session.Deletenel removemetodo. ( La pagina manca di ancore HTML, ma è possibile cercare nella pagina il codice pertinente come public void Remove,public void Add )

Quel codice "sembra sbagliato".

Perché l'autore utilizza il modello di repository - è solo per la dimostrazione dell'uso di NHibernate o è necessario o per qualche altro motivo?

Ps. Il mio background proviene da Ruby on Rails usando ActiveRecord, quindi sto cercando di capire come funziona / viene utilizzato NHibernate.


1
Se preferisci il modello ACtive Record, puoi usare Castle Active Record per sederti in cima a NHibernate castleproject.org/activerecord
Ben Robinson,

3
Questa è una domanda critica. Si sta discutendo se usarlo o meno. Ayende ha scritto i suoi argomenti per non usarlo in Repository è il nuovo Singleton

Risposte:


10

Il modello di repository non è richiesto. Come per tutti gli altri modelli è una decisione "architettonica" che devi prendere contro le tue esigenze aziendali. In generale, il modello di repository viene utilizzato per implementare "Ingorance di persistenza delle entità", il che significa che le entità non sanno nulla su come persistere sul dispositivo di archiviazione (Database, XML, TextFile, ecc.). Se, ad esempio, hai un indirizzo di entità che non contiene la logica di persistenza (non troverai da nessuna parte qualcosa come address.Save o address.Update) ma passerai la tua entità a un metodo di repository che è incaricato di persistere i cambiamenti


Penso di si e no. La stessa sessione di NHibernate è un tipo di repository generico. Quindi l'aggiunta di un repository aggiuntivo non è in generale altro che l'aggiunta di una facciata all'oggetto sessione.

in effetti la mia risposta inizia come "Il modello di archivio non è richiesto ..." può essere solo una decisione architettonica presa contro le esigenze del business il gioco è fatto

Sono totalmente d'accordo su questo. Ma mi mancava il punto che la sessione stessa è un repository, tutto qui.

9

Il vantaggio di utilizzare il modello di repository è quello di deridere il livello di accesso ai dati, in modo da poter testare il codice del livello aziendale senza chiamare il codice DAL. Ci sono altri grandi vantaggi, ma questo sembra essere molto vitale per me.


2
+1 il modello ActiveRecord rende molto difficile isolare il DAL per derisione, di solito finisce con i test unitari che richiedono il proprio database (nel qual caso il test unitario diventa un test di integrazione).
MattDavey,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.