Diferença entre o repositório e a camada de Serviço

eu vi algumas questões relacionadas, mas ainda não vejo muita diferença entre o repositório a e uma camada de serviço. Então, dado o exemplo que eu suponho que deveria se parecer com isso, se não por favor me diga por quê?

public interface ProductRepository extends CrudRepository<Product, Long>{

    public List<Product> findByName(String name);
    public List<Product> findByPrice(Double price);
}

public interface ProductService {

    public List<Product> findAll();
    public Product findById(Long id);
    public Product save(Product product);
    public void delete(Product product);
    public List<Product> findByName(String name);
    public List<Product> findByPrice(Double price);
}

e a aplicação do serviço de produtos utilizaria o repertório de produtos para aplicar os métodos. As I understand from http://docs.spring.io/spring-data/jpa/docs/1.3.0.RELEASE/reference/html/jpa.repositories.html{[6]as perguntas para os métodos do repositório são gerados automaticamente. No meu exemplo os métodos são repetidos no repositório e serviço, então por favor explique o que/por que precisa ser alterado?

Author: April, 2014-04-09

4 answers

Toda a tua lógica empresarial deve estar na camada de Serviço.

Qualquer acesso à base de Dados (qualquer armazenamento) deve ir para a camada do repositório.

Vamos dar um exemplo. Você tem que salvar uma entidade(pessoa). Mas antes de salvar a pessoa que você quer se certificar de que o primeiro nome da pessoa não existe já. A parte da validação deve ir para a camada de Negócio.

Na camada de serviço

PersonRepository repository; 
public Person save(Person p){
   Person p = findByName(p.getName();
   if (p != null){
          return some customException();
   }
   return repository.save(p); 
}

public Person findByName(String name){
     return repository.findByName(name);
}

E na tua camada de repositório concentra-te apenas em DB Operacao.

Você poderia ter feito isso no repositório Layer it self. Suponha que você tenha implementado isso em seu repositório, em seguida, o seu método de gravação sempre verificar antes de salvar (algum tempo que você pode não precisar fazer).

 16
Author: Mani, 2018-03-08 11:08:56

A camada do repositório dá-lhe um nível adicional de abstracção sobre o acesso aos dados. A camada do repositório expõe as operações básicas do CRUD.

A camada de Serviço expõe a lógica de negócio, que usa o repositório.

Pode ler uma resposta mais detalhada aqui.: https://stackoverflow.com/a/5049454/1446006
 7
Author: Martin, 2017-05-23 11:45:41

Um repositório é um padrão de acesso de dados no qual os objetos de transferência de dados são passados para um objeto de repositório que gerencia operações CRUD. Este padrão é útil em situações em que o mecanismo de seu acesso a dados pode mudar significativamente -- por exemplo, você espera ter diferentes reservas de dados como Oracle em uma implementação e servidor SQL ou mesmo HADOOP em outra.

Uma Camada de serviço é um padrão lógico de negócios que é comumente usado em arquiteturas SaaS. Usar uma camada de serviço permite uma ou mais implementações de apresentação para acessar a sua lógica de negócios através de uma interface comum. Por exemplo, se você quisesse que seu site tivesse uma API, você usaria uma camada de Serviço para implementar uma funcionalidade de back-end comum que tanto o site quanto a API consumiriam.

O primeiro deve preocupar-se principalmente com o acesso aos dados e o segundo com a lógica empresarial. Nem é obrigatório nem um deve acompanhar o outro. Em aplicações simples, ambos os padrões podem ser implementados por a mesma turma.

 4
Author: Jay, 2014-04-09 13:22:10
Tanto quanto sei, o repositório é para aceder directamente à base de dados. É aqui que as chamadas diretas para os procedimentos armazenados ou seja qual for o seu mecanismo de armazenamento de dados será.

A camada de serviço é a API dos seus dados. Normalmente há algum nível lógico que você ouviria, ou em outra camada de abstração entre o serviço e o repositório.

Por exemplo, um site chamaria um método no seu serviço. O seu serviço ligaria para o seu repositório para obter esses dados, então seu serviço iria transformá-lo de alguma forma (construir objetos, gerar informações dinâmicas baseadas em regras de negócios, etc.) em seguida, passe isso de volta para o site.

 1
Author: JasonWilczak, 2014-04-09 13:06:14