Todavía perdido en repositorios y desacoplamiento, ASP.NET MVC

Todavía estoy en mi eterna búsqueda para construir (y entender) la convención de programación moderna de desacoplamiento, IoC, DI, etc. Estoy en la parte en la que estoy tratando de descubrir cómo construir un repositorio. He examinado la publicación enDiseño de la capa de abstracción de la base de datos: ¿usa IRepository de la manera correcta? lo cual fue muy útil, pero todavía tengo algunos problemas que me confunden todo el tiempo.

Tengo mi programa ahora en 4 capas ...

Web (Proyecto | Aplicación ASP.NET MVC) - Referencias Models.dll y Persistence.dll

Modelos (objetos de dominio)

Persistencia (asignación fluida de nHibernate de objetos de dominio)

Utilidades (Proveedores, Repositorios)

Ahora bien, estoy tratando de escribir un repositorio de membresía simple. Mi primera tarea ...?

Verifique si existe una dirección de correo electrónico cuando alguien intenta registrarse. Eso parecía muy bien, así que voy a tratar de averiguar dónde colocar esto.

Al principio, sin embargo, solo lo colocaría dentro delMembershipProvider claseCreateUser método. Esto, sin embargo, reside en el proyecto Utilidades. Hasta ahora, Utilities no tiene conocimiento de nHibernate. Solo el Proyecto Persistencia tiene conocimiento de nHibernate.

Entonces, miCreateUser El método necesita consultar mi base de datos. Entonces, ¿cuál es la mejor práctica aquí? ¿Creo unUserRepository en elPersistence proyecto, y simplemente haga un método completo llamadoCheckEmail? ¿O simplemente agrego los .dll de nHibernate a miUtilities proyecto y escribir búsqueda de sesión dentro del proveedor?

Parece quemás trabajar para hacer repositorios en mi Proyecto de persistencia que realicen acciones específicas de las que hacen los proveedores. ¿Por qué incluso estoy haciendo proveedores si tengo que hacer repositorios para ellos? ¿No es el propósito de todos estos nuevos métodos detener la repetición de código? Pero se siente como mantener las cosas 'separadas'. Tengo que escribir el mismo código 2 o 3 veces. ¿Cuál es la mejor práctica aquí?

Respuestas a la pregunta(4)

Su respuesta a la pregunta