Ainda perdido em Repositórios e Desacoplamentos, ASP.NET MVC

Ainda estou na minha eterna busca de construir (e entender) a convenção de programação moderna de dissociação, IoC, DI, etc. Estou na parte em que estou tentando descobrir como construir um repositório. Eu examinei o post emDesign da camada de abstração do banco de dados - Usando o IRepository da maneira certa? o que foi muito útil, mas ainda tenho alguns problemas que estão me incomodando o tempo todo.

Eu tenho meu programa agora em 4 camadas ...

Web (Projeto | Aplicativo ASP.NET MVC) - Referências Models.dll e Persistence.dll

Modelos (objetos de domínio)

Persistência (mapeamento nHibernate fluente de objetos de domínio)

Utilitários (Provedores, Repositórios)

Agora, estou tentando escrever um simples Repositório de Membros. Minha primeira tarefa ...?

Verifique se existe um endereço de email quando alguém tenta se registrar. Parecia tudo muito bem - então vou tentar descobrir onde colocar isso.

No começo, eu apenas colocava dentro doMembershipProvider classeCreateUser método. Isso, no entanto, reside no projeto Utilitários. Até agora, o Utilities não tem conhecimento do nHibernate. Somente o Projeto de persistência tem algum conhecimento sobre o nHibernate.

Então meuCreateUser O método precisa consultar meu banco de dados. Então, qual é a melhor prática aqui? Eu crio umUserRepository noPersistence projeto e faça apenas um método inteiro chamadoCheckEmail? Ou simplesmente adiciono os .dll do nHibernate ao meuUtilities projeto e escreva a pesquisa de sessão no provedor?

Parece queMais trabalhar para criar repositórios no meu projeto de persistência que executam ações específicas do que os fornecedores. Por que estou fazendo fornecedores, se preciso fazer repositórios para eles? O objetivo de todos esses novos métodos não é interromper a repetição de código? Mas parece que para manter as coisas 'separadas', tenho que escrever o mesmo código 2 ou 3 vezes. Qual é a melhor prática aqui?

questionAnswers(4)

yourAnswerToTheQuestion