응용 서비스의 구현
응용 서비스에 도메인 로직 넣지 않기
// 서비스
public class ChangePasswordService {
public void changePassword(String memberId, String oldPw, String newPw) {
Member member = memberRepository.findById(memberId);
checkMember(member);
if (!passwordEncoder.matches(oldPw, member.getPassword()) {
throw new BadPasswordException();
}
member.setPassword(newPW);
}
}
// 엔티티
public class Member {
public void setPassword(String newPw) {
if (isEmpty(newPw)) throw new IllegalArgumentException("no new password");
this.password = newPw;
}
}
// 서비스
public class ChangePasswordService {
public void changePassword(String memberId, String oldPw, String newPw) {
Member member = memberRepository.findById(memberId);
checkMember(member);
member.changePassword(oldPw, newPW);
}
}
// 엔티티
public class Member {
public void changePassword(String oldPw, String newPw) {
if (!matchPassword(oldPw)) throw new BadPasswordException();
setPassword(newPw);
}
public void boolean matchPassword(String pwd) {
return passwordEncoder.matches(pwd);
}
public void setPassword(String newPw) {
if (isEmpty(newPw)) throw new IllegalArgumentException("no new password");
this.password = newPw;
}
}
응용 서비스에서 애그리거트를 반환하지 않도록 주의
표현 영역에 의존하지 않기