我对Controller
和Service
中包含某种代码之间的界限存在疑问。我认为我把业务逻辑包含在错误的地方。让我向您展示一个我想重构的示例,这是一个处理程序方法的一部分,它接收lists
(currentRoles, pendingOfAuthRoles..etc)
来更新用户角色:
//Insert new roles
List<Role> storedRoles = userService.getRoles(username);
List<Role> newAcceptanceRoles = new ArrayList<Role>();
for(Role role : currentRoles){
if(!storedRoles.contains(role)){
if(roleService.getPolicies(role.getRoleName()).size()>0){
userService.insertRole(username, role.getRoleName(), true, false);
newAcceptanceRoles.add(role);
}else{
userService.insertRole(username, role.getRoleName(), true, true);
}
}
}
if(!newAcceptanceRoles.isEmpty())
mailService.sendRoleAcceptanceEmail(ControllerUtils.getBaseURL(httpServletRequest), username, newAcceptanceRoles.toString(), userService.getUserByUsername(username).getEmail());
在这部分代码中,我插入了用户和角色之间的新关系。某些角色需要管理员授权,因此USER_ROLE
表有一个标志,以便不通过视图将authorized=0
的角色包含为当前用户角色。
如果角色未存储为用户角色,则通过将auth标志设置为false
来插入角色,此外,如果角色需要授权,则会向管理员发送电子邮件。
我需要像......这样的服务方法吗?
updateUserRoles(currentRoles, pendingOfAuth, pendingOfAccept)
在服务中做这种工作与否?