Spring Architecture问题:需要服务吗?

时间:2018-01-26 11:15:16

标签: java spring spring-mvc

我是Spring的新手,我正在创建一个REST服务。 我想知道服务层是什么(@Service)。 目前,我使用该Layer封装了我的DAO。 因此,例如我的PersonController收到一个PUT,调用调用DAO的PersonService,最终将该人保存在我的数据库中。

我还在www中看到了一些例子。 (https://howtodoinjava.com/spring/spring-core/how-to-use-spring-component-repository-service-and-controller-annotations/

我也在这里阅读了这个问题:Is this a good Spring Architecture (include testing)

我是否甚至需要服务,如果它只调用DAO:

public void save(Person p) {
    personDAO.save(p);
}

我真的不明白这是什么优点。我创建实际上什么都不做的类......或者它只是一个架构标准,因为其他业务逻辑也将在这一层中?

另外......当我有几个服务,比如personService,familyService,animalService等,并且它们都有一些相同的方法签名,而一些不是......在这里使用接口是否有用? / p>

当我创建如:可保存,可加载,可删除的接口时(这是否有意义?) - 我该如何正确使用它们?我是否为扩展我想要的接口的每项服务创建一个新的接口?就像扩展Loadable和Deleteable的PersonServiceInterface一样,我在PersonService中实现它?

提前致谢!

1 个答案:

答案 0 :(得分:4)

如果您觉得不需要服务层,那么您的控制器执行的业务逻辑可能会超出应有的程度。

在中间添加服务层允许纯前端的专用测试(仅控制器句柄请求和响应连接/服务处理业务逻辑/存储库持久化并查询数据)。

所以经验法则 - 让许多服务处理逻辑的一部分比将所有东西都填充到控制器中要容易得多

我不确定你要用你介绍的接口解决什么问题 - 我认为在你的服务之上重新发明Repository接口是没有意义的。如果您的服务只是直接转发到存储库,那么无论如何都无需使用它们。