Pergunta

Eu estou no processo de recuperar o atraso em documentação técnica para um projeto que eu terminei há alguns meses, e que eu estou chegando perto de terminar. Eu costumava repositórios de abstrair a camada de acesso a dados em ambos e estava escrevendo um breve resumo do padrão em nosso wiki no trabalho.

Foi enquanto escrever este resumo que eu percebi que tomou uma abordagem ligeiramente diferente na segunda vez.

Um utilizou um método InsertOnSubmit explícita juntamente com uma unidade de trabalho e uma actualização implícita com as uow mudanças de rastreamento. O outro tinha um método Save que inseriu novas entradas e existente atualizado (sem UOW).

Que abordagem você costuma favorecer? Considere os cenários CRUD habituais, onde deve o do responbility para cada um deles mentir?

Foi útil?

Solução

Eu acho que se um repositório usa Unidade de Trabalho, caching, ou quaisquer outros conceitos relacionados deve ser deixada para a implementação. Eu prefiro para a interface para se assemelhar a um armazenamento de dados que está alinhado com o modelo de domínio em mãos. Assim que um repositório de cliente seria algo parecido com isto:

interface ICustomerRepository
{
    Customer Load(int id);
    IEnumerable<Customer> Search(CustomerQuery q);
    void Save(Customer c);
    void Delete(Customer c);
}

Isto pode ser facilmente implementado por algo como NHibernate ou NHibernate com NHibernate.Linq, ou uma biblioteca SQL direta, ou até mesmo uma loja de XML ou flat-file. Se possível, eu como a manter o conceito de fora operação do repositório, ou em um âmbito mais global, de modo que as operações de vários repositórios pode ser parte de uma única transação.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top