암호 변경기능
public class ChangePasswordService {
public void changePassword(String memberId, String oldPw, String newPw) {
Member member = memberRepository.findById(memberId);
checkMemberExists(member);
member.changePassword(oldPw, newPw);
}
}
- changePassword 의 경우 Member 애그리거트에서 수행중이다.
왜 Member 애그리거트에서 해당 행위를 수행할까?
이유는 2가지이다
- 코드의 응집성의 저하
- 도메인 데이터와 관련된 로직이 분산되어 있으며, 도메인 로직을 이해하기 위하여 여러 영역을 분석해야할 가능성이 있음.
- 코드의 중복
- 여러 응용 서비스에서 해당 도메인 로직을 구현하는 경우, 같은 메서드에서 다른 의미의 기능이 탄생할 수 있습니다.
잘못된 예시
public class DeactivationService {
public void deactivate(String memberId, String oldPw) {
Member member = memberRepository.findById(memberId);
checkMemberExists(member);
if (!passwordEncoder.matches(oldPw, member.getPassword())) {
throw new BadPasswordException();
}
member.deactivate();
}
}
- 패스워드 비교를 응용 서비스 영역에서 수행
- .. 뭐 만약 그럴일은 적겠지만, 패스워드 비교하는 로직이 변경되는 경우 해당 로직부분을 전부 탐색해서 리팩토링해줘야함;;
Uploaded by N2T
'도메인주도개발' 카테고리의 다른 글
[DDD] 오프라인 선점 잠금 관련 LockManager 인터페이스와 관련 클래스 (0) | 2024.01.25 |
---|---|
[DDD] 응용 서비스의 역할 (0) | 2024.01.19 |
[DDD] 서비스 레이어에서 공통로직의 분리 방법 (0) | 2024.01.19 |
[DDD] 인터페이스가 필요한가? (0) | 2024.01.19 |
[DDD] 표현 영역과 응용 영역 (0) | 2024.01.19 |