응용 서비스의 구현


응용 서비스에 도메인 로직 넣지 않기

// 서비스
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;
	}
}

응용 서비스에서 애그리거트를 반환하지 않도록 주의


표현 영역에 의존하지 않기