[TIL 15일차] Sprint Mission2.2 - 디스코드: 관심사 분리를 통한 레이어 간 의존성 주입
오늘의 성취
- 개발 진행 상황
- 관심사 분리를 통한 레이어 간 의존성 주입
- 이전에는
Service로 의존성을 나타냈다면, 이번에는Service가 아닌Repository로 의존성을 나타냄
- 이전에는
- 관심사 분리를 통한 레이어 간 의존성 주입
JCF*Service랑File*Service의 공통점과 차이점- 공통점
- 비즈니스 규칙과 검증 로직은 거의 동일
- 도메인 객체를 생성하고, 수정하는 로직도 거의 동일
- 차이점
JCF*Service에서 데이터는 Map을 활용하기 때문에 실행 중 메모리에만 있고, 프로그램이 종료하면 사라진다.File*Service에서 데이터는 시작할 때 파일에서 이전 데이터를 로드하여 메모리에 올려 사용하고, 작업한 데이터를 다시 파일에 저장할 수 있다.- 즉, 저장 로직에서 차이가 난다.
- 공통점
프로젝트 요구사항
//...
2. 심화 요구 사항
2-1. 관심사 분리를 통한 레이어 간 의존성 주입
- 다음의 조건을 만족하는 서비스 인터페이스의 구현체를 작성하세요.
- 클래스 패키지명:
com.sprint.mission.discodeit.service.basic - 클래스 네이밍 규칙:
Basic[인터페이스 이름] - 기존에 구현한 서비스 구현체의 “비즈니스 로직”과 관련된 코드를 참고하여 구현하세요.
- 필요한 Repository 인터페이스를 필드로 선언하고 생성자를 통해 초기화하세요.
- “저장 로직”은 Repository 인터페이스 필드를 활용하세요. (직접 구현하지 마세요.)
- 클래스 패키지명:
-
Basic*Service구현체를 활용하여 테스트해보세요.public class JavaApplication { static User setupUser(UserService userService) { User user = userService.create("woody", "woody@codeit.com", "woody1234"); return user; } static Channel setupChannel(ChannelService channelService) { Channel channel = channelService.create(ChannelType.PUBLIC, "공지", "공지 채널입니다."); return channel; } static void messageCreateTest(MessageService messageService, Channel channel, User author) { Message message = messageService.create("안녕하세요.", channel.getId(), author.getId()); System.out.println("메시지 생성: " + message.getId()); } public static void main(String[] args) { // 서비스 초기화 // TODO Basic*Service 구현체를 초기화하세요. UserService userService; ChannelService channelService; MessageService messageService; // 셋업 User user = setupUser(userService); Channel channel = setupChannel(channelService); // 테스트 messageCreateTest(messageService, channel, user); } }JCF*Repository구현체를 활용하여 테스트해보세요.File*Repository구현체를 활용하여 테스트해보세요.
- 이전에 작성했던 코드(
JCF*Service또는File*Service)와 비교해 어떤 차이가 있는지 정리해보세요.
GitHub Repository 주소
https://github.com/JungH200000/10-sprint-mission/tree/sprint2
Leave a comment