트랜잭션, 서비스로직vs도메인로직

luckygamza·2021년 12월 28일

트랜잭션과 더티체킹

트랜잭션이 끝나면 더이상 더티체킹의 대상이 되지 않는다.

User user = userRepository.findById(userId); //db에 찔러서 값을 가져오고 나면 트랜잭션이 끝난것.
user.setRole(Admin);//트랙잭션에 해당하지 않아 더티 체킹의 대상이 되지 않는다.

트랜잭션이 끝나 더티체킹이 안될때 해결하기 위해 사용한 방법

트랜잭션을 한번 더 수행했다.

User user = userRepository.findById(userId); //db에 찔러서 값을 가져오고 나면 트랜잭션이 끝난것.
user.setRole(Admin); //트랙잭션에 해당하지 않아 더티 체킹의 대상이 되지 않는다.
userRepository.save(user); // 트랜잭션을 한번 더 수행 해서 업데이트를 하게 한다.

로직을 서비스에 두기 vs 도메인에 두기

if (user.getUserRole() != UserRole.MANAGER){
            throw new CustomException("답변권한이 없는 user입니다.");
}

위와 같이 서비스에서 바로 로직을 만들수도 있지만,

answer.canWriteBy(user)

와 같이 answer 도메인에 로직을 만들어두고 answer 도메인 객체에게 질의를 하는 방법도 있다.

로직을 서비스에 두었을 때 장점

로직이 어떻게 작동하는지 서비스에서 바로 다 보인다.(캡슐화가 되어있지 않다)

로직을 도메인에 두었을 때 장점

도메인 객체에게 질의를 하는 방식으로 로직을 설계할 수 있어 좀 더 객체지향적이다.(캡슐화가 되어 있다)

우리 서비스에 어느 것이 더 나을지 계속 고민해보는 중. 도메인주도개발을 하는게 좋을까

0개의 댓글