트랜잭션이 끝나면 더이상 더티체킹의 대상이 되지 않는다.
User user = userRepository.findById(userId); //db에 찔러서 값을 가져오고 나면 트랜잭션이 끝난것.
user.setRole(Admin);//트랙잭션에 해당하지 않아 더티 체킹의 대상이 되지 않는다.
트랜잭션을 한번 더 수행했다.
User user = userRepository.findById(userId); //db에 찔러서 값을 가져오고 나면 트랜잭션이 끝난것.
user.setRole(Admin); //트랙잭션에 해당하지 않아 더티 체킹의 대상이 되지 않는다.
userRepository.save(user); // 트랜잭션을 한번 더 수행 해서 업데이트를 하게 한다.
if (user.getUserRole() != UserRole.MANAGER){
throw new CustomException("답변권한이 없는 user입니다.");
}
위와 같이 서비스에서 바로 로직을 만들수도 있지만,
answer.canWriteBy(user)
와 같이 answer 도메인에 로직을 만들어두고 answer 도메인 객체에게 질의를 하는 방법도 있다.
로직이 어떻게 작동하는지 서비스에서 바로 다 보인다.(캡슐화가 되어있지 않다)
도메인 객체에게 질의를 하는 방식으로 로직을 설계할 수 있어 좀 더 객체지향적이다.(캡슐화가 되어 있다)
우리 서비스에 어느 것이 더 나을지 계속 고민해보는 중. 도메인주도개발을 하는게 좋을까