编程语言
首页 > 编程语言> > java – 应该在服务层中编写哪些方法?

java – 应该在服务层中编写哪些方法?

作者:互联网

我尝试按照Spring MVC的教程进行操作.在教程中有UserDao接口(使用Spring Data JPA)

public interface UserDao extends JpaRepository<User, Long> {
    User findByUsername(String username);
}

还有UserService和UserServiceImpl

public interface UserService {
    void save(User user);

    User findByUsername(String username);
}

@Service
public class UserServiceImpl implements UserService {

    @Autowired
    private UserDao userDao;

    @Autowired
    private RoleDao roleDao;

    @Autowired
    private BCryptPasswordEncoder bCryptPasswordEncoder;

    @Override
    public void save(User user) {
        user.setPassword(bCryptPasswordEncoder.encode(user.getPassword()));
        Set<Role> roles = new HashSet<>();
        roles.add(roleDao.getOne(1L));
        user.setRoles(roles);
        userDao.save(user);
    }

    @Override
    public User findByUsername(String username) {
        return userDao.findByUsername(username);
    }
}

>为什么save方法在Service Layer中而不在dao层?我读到所有CRUD操作都应该进入dao层.
> UserServiceImpl中findByUsername(String username)的用途是什么?我们可以在dao中使用该方法,因为我们使用Spring Data,所以Spring已经实现了这个功能.

解决方法:

>

I read that all CRUD operations should go in the dao layer.

你是对的. userDao.save(user) – 这是CRUD.但是设置密码并添加角色 – 它是业务逻辑的一部分. DAO层应该对业务逻辑一无所知.在这种情况下,dao层应该只准备用户并将其保存到db中.就这样.

>

What the purpose of findByUsername(String username) in UserServiceImpl

出于同样的原因,findByUsername(String username)在Service中.现在没有任何反应,只是从DAO调用了一个方法.但突然之间,有必要在从DAO调用方法之前添加一些逻辑.

标签:service-layer,java,spring,spring-data-jpa,spring-mvc
来源: https://codeday.me/bug/20190823/1701043.html