본 포스트 시리즈는 「도메인 주도 설계 철저 입문」책을 요약한 내용입니다.
이전 발행 글 보기
2024.09.04 - [DDD/도메인 주도 설계 철저 입문] - 도메인 주도 설계란? - 「도메인 주도 설계 철저 입문」 2장 (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)
06장 유스케이스를 구현하기 위한 '애플리케이션 서비스'
(1) 애플리케이션 서비스 정의와 구현
애플리케이션 서비스란
4장에서 도메인 주도 설계에는 도메인을 위한 서비스(도메인 서비스)와 애플리케이션을 위한 서비스(애플리케이션 서비스) 두 가지 서비스가 있다고 했는데, 그 애플리케이션 서비스에 대한 내용이다. 애플리케이션 서비스는 유스케이스를 구현하는 객체이다.
유스케이스란
SNS의 사용자 기능에 대한 유스케이스는 '사용자 등록하기', '사용자 정보 확인하기', '사용자 정보 수정하기', '탈퇴하기'가 있다.
애플리케이션 서비스 vs. 도메인 서비스
애플리케이션 서비스 | 도메인 서비스 | |
공통점 | 서비스의 행동은 자기 자신을 위한 것이 아니므로 주로 행동에 해당한다. (cf. 값 객체나 엔티티는 자기 자신을 위한 행동을 가지고, 주로 사물에 해당한다. ) |
|
목적 | 프로그램 사용자의 문제를 해결 | 도메인 지식을 나타내기 위함 |
예시 | 사용자 등록 서비스 (UserRegisterService) - 사용자 등록 | 사용자 엔티티 서비스 (UserService) - 사용자 중복 확인 |
애플리케이션 서비스 (1) Create
CRUD에 해당하는 애플리케이션 서비스 중 Create를 구현한 코드는 다음과 같다. User 엔티티나, 값 객체로 구현하는 UserName과 UserId는 2장(값 객체)과 3장(엔티티)에서 다룬 것과 동일하여 생략했다.
public class UserApplicationService {
private final IUserRepository userRepository;
private final UserService userService;
public UserApplicationService(IUserRepository userRepository, UserService userService) {
this.userRepository = userRepository;
this.userService = userService;
}
public void register(String name, String mailAddress) {
User user = new User(new UserName(name), new MailAddress(mailAddress));
// 도메인 서비스를 통해 중복 확인
if (userService.exists(user)) {
throw new CanNotRegisterUserException(user, "이미 등록된 사용자입니다.");
}
userRepository.save(user);
}
}
도메인 서비스의 활용
주목할 점은 사용자 중복 조회를 `UserService`에게 맡겼다는 점이다. `UserApplicationService`도 UserRepository의 find 함수를 통해 중복 검사를 직접할 수 있지만, 유지보수 측면에서 여러 곳에서 사용될 수 있는 중복 검사의 경우 도메인 서비스에 맡기는 것이 바람직하다. 만약 중복 검사를 ID가 아닌 닉네임으로 하도록 기준이 변경되면, `UserService` 도메인 서비스만 수정하면 되기 때문이다.
요약
1. 어플리케이션 서비스란 유스케이스를 구현한 객체이다. 2. 어플리케이션 서비스를 구현할 때는 도메인 서비스를 적극적으로 활용해야 한다. |
'DDD > 도메인 주도 설계 철저 입문' 카테고리의 다른 글
유스케이스의 응집도와 구현 - 「도메인 주도 설계 철저 입문」 6장 (3) (0) | 2024.10.06 |
---|---|
파사드 패턴으로 유스케이스 구현하기 - 「도메인 주도 설계 철저 입문」 6장 (2) (1) | 2024.10.05 |
레포지토리 구현 시 팁 - 「도메인 주도 설계 철저 입문」 5장 (3) (0) | 2024.09.30 |
레포지토리 구현 방법과 테스트 방법 - 「도메인 주도 설계 철저 입문」 5장 (2) (2) | 2024.09.30 |
레포지토리란? - 「도메인 주도 설계 철저 입문」 5장 (1) (0) | 2024.09.30 |