【发布时间】:2017-08-13 02:51:29
【问题描述】:
我有一个简单的 Spring-Boot Restful 应用程序。我有一个控制器层和一个存储库层,但没有服务层。让我向您展示我的控制器方法之一:
@RequestMapping(value = "users/{id}", method = RequestMethod.GET)
public Resource<UserResource> get(@PathVariable Long id) throws NotFoundException {
log.info("Invoked method: get with ID: " + id);
log.warn("Searching for user with ID " + id);
User user = userRepository.findOne(id);
if (user == null){
log.error("Unexpected error, User with ID " + id + " not found");
throw new NotFoundException("User with ID " + id + " not found");
}
log.info("User found. Sending request back. ID of user is " + id);
return new Resource<UserResource>(getUserResource(user));
}
由于我没有服务层,我的控制器为我执行业务逻辑。现在我想实现服务层。我的控制器应该/不应该做什么?
我的服务层(我现在要实现的)是否应该完成所有工作而我的控制器只将请求委托给服务层?
【问题讨论】:
-
不久前,我在一家大型汽车制造商的一个大项目中工作。我们有控制器层、服务层和 DAO 层(数据访问对象 - 用于查询数据库)。逻辑是:控制器接收请求,服务执行操作并在必要时调用 DAO,然后将结果返回给控制器。 DAO 访问数据库并执行查询。控制器层必须非常轻巧,控制器只需委托给服务并加载视图。 DAO 执行查询,而服务使用来自控制器的数据完成所有剩余的工作。
-
在这个简单的例子中,如果你需要一些业务逻辑,你只需要
User user = userService.findOne(id);,你应该像你说的那样实现服务...... -
好的。这意味着控制器应该什么都不做,只接收请求并将其发回。谢谢你们两个:)
标签: java spring rest spring-boot spring-rest