본 포스트 시리즈는 「도메인 주도 설계 철저 입문」책을 요약한 내용입니다.
이전 발행 글 보기
2024.09.02 - [DDD/도메인 주도 설계 철저 입문] - 도메인 주도 설계란? - 「도메인 주도 설계 철저 입문」 1장
2024.09.04 - [DDD/도메인 주도 설계 철저 입문] - 도메인 주도 설계란? - 「도메인 주도 설계 철저 입문」 2장 (1)
2024.09.05 - [DDD/도메인 주도 설계 철저 입문] - 도메인 주도 설계란? - 「도메인 주도 설계 철저 입문」 2장 (2)
2024.09.09 - [DDD/도메인 주도 설계 철저 입문] - 도메인 주도 설계란? - 「도메인 주도 설계 철저 입문」 3장 (1)
2024.09.09 - [DDD/도메인 주도 설계 철저 입문] - 도메인 주도 설계란? - 「도메인 주도 설계 철저 입문」 3장 (1)
2024.09.11 - [DDD/도메인 주도 설계 철저 입문] - 도메인 주도 설계란? - 「도메인 주도 설계 철저 입문」 3장 (2)
2024.09.30 - [DDD/도메인 주도 설계 철저 입문] - 도메인 주도 설계란? - 「도메인 주도 설계 철저 입문」 4장
2024.09.30 - [DDD/도메인 주도 설계 철저 입문] - 도메인 주도 설계란? - 「도메인 주도 설계 철저 입문」 5장 (1)
2024.09.30 - [DDD/도메인 주도 설계 철저 입문] - 도메인 주도 설계란? - 「도메인 주도 설계 철저 입문」 5장 (2)
2024.09.30 - [DDD/도메인 주도 설계 철저 입문] - 도메인 주도 설계란? - 「도메인 주도 설계 철저 입문」 5장 (3)
2024.10.05 - [DDD/도메인 주도 설계 철저 입문] - 도메인 주도 설계란? - 「도메인 주도 설계 철저 입문」 6장 (1)
2024.10.05 - [DDD/도메인 주도 설계 철저 입문] - 도메인 주도 설계란? - 「도메인 주도 설계 철저 입문」 6장 (2)
2024.10.06 - [DDD/도메인 주도 설계 철저 입문] - 도메인 주도 설계란? - 「도메인 주도 설계 철저 입문」 6장 (3)
06장 유스케이스를 구현하기 위한 '애플리케이션 서비스'
(4) 애플리케이션 서비스 구현 Tip
인터페이스로 구현하기
다음은 앱 서비스를 인터페이스로 구현한 경우 클라이언트가 이를 사용하는 코드이다.
public class Client {
private IUserRegisterService userRegisterService;
public Client(IUserRegisterService userRegisterService) {
this.userRegisterService = userRegisterService;
}
public void register(String name) {
UserRegisterCommand command = new UserRegisterCommand(name);
userRegisterService.handle(command);
}
}
인터페이스 구현 이유
앱 서비스를 인터페이스로 구현하면 첫째, 앱 서비스의 구현이 끝나기 전에 클라이언트 측이 `MockUserRegisterService`를 만들어 개발을 진행할 수 있어 효율적이다. 둘째, 예외가 발생했을 때 예외 처리에 대한 개발을 진행하기 위해 `ExceptionUserRegisterService`를 개발하여 사용할 수 있다.
무상태로 구현하기
앱 서비스는 자기 자신을 변화시키는 것이 목적이 아니다. 프로그램 유저의 문제를 해결하기 위한 '행동'이다. 따라서 다음과 같이 구현하는 것은 바람직하지 않다.
public class UserApplicationService {
(...생략...)
private boolean sendMail;
(...생략...)
public void register(UserRegisterCommand command) {
(...생략...)
// 메일 발송 설정이 활성화된 경우 메일을 발송
if (sendMail) {
MailUtility.send("user registered");
}
}
}
`sendMail`의 값은 서비스의 행동에 직접적으로 영향을 미치므로, `Register` 메소드를 사용할 때 서비스 인스턴스 상태를 신경쓰게 된다.
그렇다고 앱 서비스가 아무런 상태도 가지지 않는 것은 아니다. 다음 코드에서는 `UserApplicationService`가 `userRepository` 인스턴스를 가지지만, 이는 자신의 행동을 변화시키는 상태가 아니므로 문제 없다.
public class UserApplicationService {
private final IUserRepository userRepository;
(...생략...)
}
요약
1. 앱 서비스는 인터페이스로 구현할 경우 개발 생산성이 향상될 수 있다. 2. 앱 서비스는 자기 자신에게 변화를 주는 상태를 가져선 안된다. |
'DDD > 도메인 주도 설계 철저 입문' 카테고리의 다른 글
소프트웨어 구현 - 「도메인 주도 설계 철저 입문」 8장 (3) | 2024.10.13 |
---|---|
소프트웨어의 유연성을 위한 의존 관계 제어 - 「도메인 주도 설계 철저 입문」 7장 (2) | 2024.10.06 |
유스케이스의 응집도와 구현 - 「도메인 주도 설계 철저 입문」 6장 (3) (0) | 2024.10.06 |
파사드 패턴으로 유스케이스 구현하기 - 「도메인 주도 설계 철저 입문」 6장 (2) (1) | 2024.10.05 |
유스케이스란? - 「도메인 주도 설계 철저 입문」 6장 (1) (1) | 2024.10.05 |