¿Cuál es el enfoque recomendado para tomar con el patrón Nhibernate + Repository?NHibernate and Repository pattern
Hay tantos artículos y opiniones diferentes en torno a que no estoy seguro de qué camino tomar. Take this lengthy article, por ejemplo. Da un ejemplo de objetos Query, pero cada repositorio concreto acepta un ISession
en su constructor. ¿Qué debería preocuparme por las sesiones de NH en mi BL (capa de negocios)?
Crear un montón de repositorios, cada uno de ellos con un montón de métodos específicos?
Al parecer, eso es demasiado trabajo porque BL está "permitido" ser consciente de NHibernate (Repository is the new Singleton)?Crear un único repositorio genérico, pero exponer
IQueriable<T>
y utilizar LINQ en BL
De vez en cuando hay una consulta que LINQ to NHibernate no será capaz de procesar (o tengo que pellizcar el SQL manualmente una vez en cien consultas). Esto es fácil con métodos de repo personalizados, pero casi imposible con código que depende de LINQ. Y usar ambos solo porque LINQ se rompe en algunos casos es una tontería.objetos de consulta?
QueryOver
también es específico de NH, lo que significa que BL está nuevamente al tanto de la implementación de DAL.otro enfoque?
Obviamente, tengo que ser capaz de gestionar transacciones en algún lugar, tal vez usando un Patten de unidad de trabajo (aunque también existen muchas implementaciones diferentes de que alrededor).
¿Estás hablando de repositorio como en DDD? – mathieu
@mathieu: sí. (No estoy seguro de en qué otros repositorios podría pensar). Pero en general, estoy buscando una forma recomendada de organizar una aplicación escrita en 2011, con todas las herramientas y patrones modernos. He usado NHibernate de varias maneras antes, pero odio cuando necesito hacer referencia a clases específicas de NH en mi BL. Y parece que cada vez es más común decir que NH no necesita abstracción. – doe
@doe - seguramente sus clases específicas de NH son simplemente las entidades de su dominio? de lo contrario, está buscando cantidades considerables de duplicación de propiedades y mapeo. –