만약 서비스레이어에서 공통 로직이 발생하는 경우 어떤식으로 코드를 작성할 수 있을까?
글 작성 전 도메인 로직에서는 별도 레포지터리 영역을 접근할 수 없기에, 서비스 영역에서만 작성이 가능하다는 전제가 필요하다.
- 일단 서비스 레이어 자체
MemberService
에서 단순히 하나의 메서드를 만들어서 공통으로 사용하는 방법도 있다.- 해당 방법은
- 서비스 레이어의 코드가 너무 길어진다 - 는 단점
- 코드 크기가 커지면서 연란성이 적은 코드가 한 클래스에 함께 위치하여
- 코드 이해도를 저하시킬 위험성이 존재한다.
- 해당 방법은
해당 문제점을 해결을 위해서는 일단 레이어 ( 혹은 클래스 ) 를 분리하는 방법이 존재한다.
- 오로지 비밀번호를 변경하는 서비스레이어를 생성하여
public class ChangePasswordService { private MemberRepository memberRepository; public void changePassword(String memberId, String curPw, String newPw) { Member member = MemberServiceHelper.findExistingMember(memberRepository, memberId); member.changePassword(curPw, newPw); } }
모든 비밀번호 변경 기능은 해당 서비스를 호출하여 수행하며
MemberServiceHelper
라는 클래스를 통해- 멤버 와 연관있지만, 공통되어 자주 쓰이는 로직을 분리함
public final class MemberServiceHelper { public static Member findExistingMember(MemberRepository repo, String memberId) { Member member = repo.findById(memberId); if (member == null) throw new NoMemberException(memberId); return member; } }
위 방식과 같이 별도 클래스 분화를 통하여 ..
- 클래스가 많아져 조금 복잡해보이기도 하겠지만,
- 개인적으로는 그냥 클래스가 많아지더라도 클래스이름, 메서드 이름만으로도 어떤 역할을 수행하는지 최대한 알려주도록 하는게 유지보수성면에서 조금더 유리하지 않나 생각된다.
Uploaded by N2T
'도메인주도개발' 카테고리의 다른 글
[DDD] 응용 서비스의 역할 (0) | 2024.01.19 |
---|---|
[DDD] 도메인 로직을 넣지 않기! (0) | 2024.01.19 |
[DDD] 인터페이스가 필요한가? (0) | 2024.01.19 |
[DDD] 표현 영역과 응용 영역 (0) | 2024.01.19 |
표현 영역과 응용 영역 (0) | 2024.01.07 |