비즈니스 로직의 처리 방식의 차이점 문의
205
작성한 질문수 1
안녕하세요, 먼저 강의 잘 듣고 있습니다.
금일 진행중에...
뭔가 좀 정리가 안되는 부분이 있어서 한번 문의드립니다.
멤버가 가입하는 저장 처리를 할 경우,
강사님이 구현하신 코드는 서비스에서 도메인객체에서 처리하게끔 구현하셨는데...
- StudyService.java
public void addMember(Study study, Account account) {
study.addMember(account);
}
- Study.java
public void addMember(Account account) {
this.getMembers().add(account);
}
저 같은 경우에는 StudyService 에서 바로 처리하도록 했는데...
public void join(Account account, Study study) {
Optional<Account> byId = accountRepository .findById(account.getId());
byId.ifPresent(a -> study.getMembers().add(a));
}
의문 1) Account는 detach이기때문에 persistence상태로의 조회로 한번 더 안해도 되는건가요?
2) 심플하게 간다면 Service 코드에서 직접 study.getMembers().add(account); 로 해도 될텐데, 왜 도메인 객체로 넘겨서 가입(저장) 처리를 하셨는지가 궁금합니다.
3) 2번과 같은 연장선상의 질문이긴 합니다만 서비스에서 직접 처리한 (예: study.setPath(newPath);)와의 차이가 있는것인가요?
디자인 패턴의 이슈인지, 아님 다른 효율성 들을 위한 고려인지...궁금해서 문의드립니다.
답변 1
0
안녕하세요.
1) 컨트롤러로 코드가 들어오기 전부터 OSIV 필터 때문에 열려있던 영속성 컨텍스트에 컨트롤러에서 조회했던 study가 이미 persistent 상태로 들어가 있었고, 그걸 서비스쪽에서 그대로 전달 받았으니 여전히 study는 이미 Persistent 상태입니다. 그 상태에서 서비스에 걸려있는 트랜잭션 내부에서 study 객체에 변경이 있었으니 트랜잭션이 끝나면서 변경 사항을 DB에 반영해주고 끝납니다. 그래서 insert 쿼리도 볼 수 있는 것이죠.
2, 3) 이건 취향입니다만, 가능하면 캡슐화를 하고 메시지 체인을 길게 가져가지 않도록 노력한것이지 기능상 차이는 없습니다.
Study 개설하는 로직에 대해서 궁금점이 있습니다.
0
56
1
앱 재시작 후 회원가입
0
105
1
app.host 관련 질문이 있습니다
0
99
1
강의 버전 정보
0
129
1
event, study 참조
0
224
2
비밀번호 변경 로직 질문있습니다.
0
136
1
프로필 수정 처리 merge 질문입니다.
0
109
1
회원가입 성공 후 redirect이동시 권한 질문
0
498
3
HtmlEmailService 개발하다 생긴 의문입니다
0
254
2
postgreSql 연결하여 JPA 를 통해 테이블 생성시 ZONE 테이블 생성에서 에러가 납니다
0
433
2
수업질문 [긴급] 로그인안되는 문제 말씀해주시는 부분 반영해서 최종 질문드립니다
0
265
2
[긴급-재업로드]수업질문 로그인 안 되는 문제
0
239
1
[긴급] 로그인해도 네비게이션 바가 안 바뀌고 있습니다!! 로그인이 안 됩니다 도와주세요
0
278
1
cropper 오류 문제로 질문드립니다..
0
289
2
authentication관련 질문...
0
499
2
모임참가 취소 할때 로직 질문
0
352
3
안녕하세요 기선님 질문이있습니다..
0
232
1
HTML코드 및 강의 중간자료들
0
682
3
springSecurity
0
526
2
버전 질문입니다.
0
305
1
부트스트랩, css
0
358
2
영속성 컨텍스트 질문
0
253
2
다시 강의를 보니 드는생각..
0
356
2
5:50에 나오는 HTML코드는 어디서 찾을 수 있나여?
0
318
1





