存储库和服务层之间的区别

原学程将引见保存库以及办事层之间的差别的处置办法,这篇学程是从其余处所瞅到的,而后减了1些海外法式员的疑问与解问,愿望能对于您有所赞助,佳了,上面开端进修吧。

存储库和服务层之间的区别 教程 第1张

成绩描写

我检查了1些相干成绩,但是我依然瞅没有出保存库以及办事层之间有太年夜差别。所以给出这个例子,我想应当是如许的,假如没有是,请告知我为何?

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);
}

而且ProductService的完成将应用ProductRepository去完成这些办法。我从http://docs.spring.io/spring-data/jpa/docs/一.三.0.RELEASE/reference/html/jpa.repositories.html中懂得到,对于保存库中办法的盘问是主动死成的。在我的示例中,这些办法在保存库以及办事中反复,是以请说明须要变动的实质/缘由?

推举谜底

您的一切营业逻辑皆应当在办事层中。

对于数据库(所有保存)的所有拜访皆应拜访保存库层。

让我们举个例子。您必需保留1个虚体(人)。然则在保留这人之前,您须要保证这人的名字没有存留。

所以验证部门应当转到营业层。

在办事层

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);
}

在您的保存库层中,只需专注于数据库操纵。

您不妨在Repository Layer It自己中完成此操纵。假定您曾经在保存库中完成了这1面,这么您的保留办法老是在保留之进步言检讨(有时您能够没有须要如许做)。

佳了闭于保存库以及办事层之间的差别的学程便到这里便停止了,愿望趣模板源码网找到的这篇技巧文章能赞助到年夜野,更多技巧学程不妨在站内搜刮。