Penso di essere bloccato nella paralisi dell'analisi. Per favore aiuto!Uso del modello di progettazione dell'unità di lavoro/Sessioni NHibernate in un MVPM WPF
Al momento ho un progetto che
- Usa NHibernate su SQLite
- Utensili Repository e Unità di modello di lavoro: http://www.nhforge.org/wikis/patternsandpractices/nhibernate-and-the-unit-of-work-pattern.aspx
- strategia MVVM in un'applicazione WPF
unità di lavoro l'implementazione nel mio caso supporta una sessione di NHibernate alla volta. All'epoca pensavo che questo avesse senso; nasconde il funzionamento interno della sessione di NHibernate da ViewModel.
Ora, secondo Oren Eini (Ayende): http://msdn.microsoft.com/en-us/magazine/ee819139.aspx
convince il pubblico che le sessioni NHibernate dovrebbero essere creati/smaltiti quando la vista associata con il presentatore/ViewModel è disposto. Presenta i problemi per cui non si desidera una sessione per app di Windows, né si desidera creare/disporre una sessione per transazione. Questo purtroppo pone un problema perché la mia interfaccia utente può facilmente avere oltre 10 view/viewmodels presenti in un'app. Sta presentando usando una strategia MVP, ma i suoi consigli si traducono in MVVM?
Ciò significa che dovrei eliminare l'unità di lavoro e fare in modo che viewmodel crei direttamente le sessioni di NHibernate? Un'app WPF dovrebbe avere solo una sessione di lavoro alla volta? Se ciò è vero, quando dovrei creare/disporre una sessione di NHibernate?
E non ho ancora considerato in che modo le sessioni stateless di NHibernate si adattino a tutto questo! Il mio cervello sta per esplodere. Per favore aiuto!
Aggiornamento:
ho trovato Unità di Ayende di implementazione Work in Rhino Tools. Ho scoperto che ci sono differenze significative tra la sua implementazione e quella che ho fatto. Sicuramente ha supportato più sessioni. Dopo ulteriori ricerche penso che sia meglio che faccio la seguente:
- rottami mia implementazione di unità di lavoro
- rassegnarsi a utilizzare ISession di NHibernate e IStatelessSession oggetti direttamente dal ViewModel. Mentre a mio parere non è l'ideale, ho già passato troppo tempo sull'unità di lavoro e non si presta a quello che è. Devo applicare KISS e YAGNI ad un certo punto. Posso almeno prendere confidenza nel fatto che l'articolo di Ayende e alcuni altri sottolineano che l'uso diretto di questi è OK.
- Se davvero non voglio esporre ISession, posso sempre usare Castle.ActiveRecord, ma penso che non sia necessario.
- Posso riutilizzare il codice Session Factory, quindi l'implementazione dell'unità di lavoro non è uno spreco totale.
- Refactored i miei repository per consentire l'iniezione sia di StatelessSession che di Session e utilizzare stateless se è disponibile: altrimenti utilizzare la sessione regolare.
Dopo tutto questo, allora può applicare la strategia di aprire una sessione/sessione senza per viewmodel e quando vista è disposto, avere filo viewmodel/smaltire il/sessione stateless session.
Suona come un piano?
Il primo collegamento è morto – afaolek