Por que o padrão de repositório é necessário no NHibernate?

13

Estou lendo o oficial Seu primeiro aplicativo baseado no NHibernate .

Embora o tutorial seja bom e fácil de seguir, estou me perguntando por que o padrão de Repositório é usado.

Nos vários Add, Update, Removemétodos na ProductRepositoryimplementação, o código é quase idêntico - todos eles estão usando transações, ea diferença está na "carne", isto é chamada session.Saveint o Addmétodo, session.Deleteno removemétodo. ( A página não possui âncoras HTML, mas você pode pesquisar na página o código relevante public void Remove, como ,public void Add )

Esse código simplesmente "parece errado".

Por que o autor está usando o padrão Repository - é apenas para demonstração do NHibernate ou é necessário ou por algum outro motivo?

Ps. Meu background é do Ruby on Rails usando o ActiveRecord, então estou tentando entender como o NHibernate funciona / é usado.

Zabba
fonte
1
Se você preferir o Active Record, em seguida, você pode usar castelo Active Record para se sentar em cima do NHibernate castleproject.org/activerecord
Ben Robinson
3
Esta é uma pergunta crítica. Há algumas discussões em torno de usá-lo ou não. Ayende escreveu seus argumentos para não usá-lo no Repositório é o novo Singleton

Respostas:

10

O padrão do repositório não é necessário. Quanto a todo o outro padrão, é uma decisão "arquitetônica" que você deve tomar em relação às suas necessidades de negócios. Em geral, o padrão do repositório é usado para implementar a "Entidade de persistência da entidade", o que significa que suas entidades não sabem nada sobre como persistir no seu dispositivo de armazenamento (banco de dados, XML, TextFile, etc). Se, por exemplo, você tiver um endereço de entidade, ele não conterá a lógica de persistência (você não encontrará em lugar algum algo como address.Save ou address.Update), mas passará sua entidade para um método de repositório responsável por persistir o alterar

Massimiliano Peluso
fonte
Eu acho que sim e não. A sessão do NHibernate em si é um tipo de repositório genérico. Portanto, adicionar um repositório adicional nada mais é do que adicionar uma fachada ao objeto da sessão.
na verdade, a minha resposta começam como "O padrão de repositório não é necessária ..." pode ser apenas uma arquitectura decisão make contra as necessidades do negócio é isso
Eu concordo totalmente com isso. Mas eu estava perdendo o ponto de que a sessão em si é um repositório, só isso.
9

A vantagem de usar o padrão de repositório é zombar da camada de acesso a dados, para que você possa testar o código da camada de negócios sem chamar o código DAL. Existem outras grandes vantagens, mas isso parece ser muito vital para mim.


fonte
2
+1 no padrão ActiveRecord torna muito difícil isolar o DAL para zombar, geralmente terminando com os testes de unidade que exigem seu próprio banco de dados (nesse caso, o teste de unidade se torna um teste de integração).
precisa saber é o seguinte