Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Padrão repository

Pessoal do usando o springdata com MongoRepository.

Estou numa discussão com outro desenvolvedor pois penso que poderia eliminar as classes DAO e o mesmo diz que não Seguindo a documentação meu repositório é uma interface que extende MongoRepository e nesse processo eu chamo direto no serviço. Deveria ter eu uma camada intermediaria pra implementar essas interfaces ficando tipo com dois repositórios?


public interface CustomerRepository extends MongoRepository<CustomerBusinessUnit, String> {}

@Repository
public class CustomerRepositoryImp implements CustomerRepository {}

@Service
public class CustomerService{
@Autowired
CustomerRepositoryImp

}
3 respostas

Não precisa ter essa camada, pois MongoRepository já é uma interface (O repositório em si).

Sua interface CustomerRepository já seria sua implementação, apesar de não parecer.

Foi o que eu disse pro outro desenvolvedor mas o que ele alegou é

Um dos motivos da gente ter uma classe Repository alguma coisa é poder buscar de outras fontes que não só o banco de dados correto. É pra ficar as regras referentes a dados,não de negocio, apenas de dados. Eu acho sem sentido e queria ajuda embasada em experiência pra explicar pra ele que é desnecessário. Hoje a estrutura é DAO>Repositório>Serviço lembrando que o repositório é uma classe e chama o dao.

solução!

Faz sentido se você for seguir DDD a risca. Esta correto o fato de vc ter um DAO na sua camada de infra-estrutura que lida com dados e o Repositório na sua camada de domínio e nessa camada ficam concentradas todas as regras de negócios.

Dessa forma você fica desacoplado, se um dia tiver a necessidade de mudar a origem dos dados (BD, WebService, CSV e etc...)

Porém como você está usando MongoRepository, não temos um DAO concreto. E sim um Repository, toda a implementação de como fazer um findAll, findOne ou um save, insert, delete e etc já foi feita. Essas implementações que deveriam ficar no DAO o próprio framework fez a implementação.

Logo você não tem contato direto com o DAO (camada de infraestrutura) e sim com o Repository.

Se você precisar mudar a origem, você pode simplesmente criar uma implementação para seu CustomerRepository que consuma da sua nova fonte de dados.

Mas assim esse é só o meu ponto de vista sobre o problema que você levantou.

Eu não acho necessário criar implementações para esse cenário.

Espero ter ajudado.