cintrollelr에서 뭐 find 하는 리퀘스트같은게 오면 콘트롤러가 처리하잖아?
하나 찾는거 파라메터 id만 있으니까 대충 실행
service.findOne(id)
근데 service에 저 fineOne 메소드도 내부로 가면
repository.findOne().where().. 어쩌구
이지랄하면서 뽑고 몇가지 조건문 해주고 값 리턴
콘트롤러 그대로 값 리턴
이게 맞는거냐?
네이밍 똑같으면 계속 거치는 거치대같은 느낌밖에 안나는데?
아니면 이 방식이 이상한건가?
controller의 메소드 네이밍이랑 service 메소드까지만 동일하고
레파는 findOne 등등 레파만 CRUD 형태로 가는건가
마이바티스 형태의 자바의 경우는
1. controller = path: users/:id , method: getUserList
2. service = method: find
3. repository = method: find
너가 잘못하고 있는거임. repo는 findOne같은게 맞고 서비스는 selectMembers 이런식으로 비즈니스 메소드로 명명해야함
진짜?? 나 책 예제는 글쓴이 전자처럼 되어있어서 나도 저렇게 짜고있는데
아 뭔소리인지 알겠음. 그럼 콘트롤러랑 서비스 메소드가 일치해질텐데 굳이 나누는 이유는 뭐임? 비즈니스 로직 뭐 가공하는거 하나라도 들어가는 순간 그게 콘트롤러단 레이어에 있게하면 안되서 걍 나눈거뿐임?
똑같이 할거면 서비스를 왜 만드노 그냥 repo단에서 끊고 거기서 다 처리하면되는데
서비스랑 컨트롤러를 구분하는 이유는 컨트롤러 = 단순 URL 리퀘스트 매핑, 서비스 = 비즈니스 로직 처리. 유지보수 때문임
쿼리 파라메터가 웨어절 필터랑 소트랑 리밋같은거 그런건 미리 콘트롤러에서 뭐 객체화한걸 서비스로 주냐? 서비스에서 지가 가공해서 쓰냐?
왜냐면 selectMembers findMembers 이런 메소드를 서비스에 만들었는데 과연 하나의 컨트롤러에서만 쓸까?
컨트롤러에서 받을때부터 Dto로 받고 그 Dto를 Service로 넘김
그럼 콘트롤러 네이밍하고 서비스 네이밍이 일치 안할 수도 있겠네. 생각해보니 콘트롤러는 업무 도메인 레이어로 끊키고 서비스 레파 엔티티는 1:1 테이블로 끊키니 진짜 여러 콘트롤러에서 호출될 수도 있겠네. 그럼 문제는 서비스에서는 자기 테이블네임 기준의 메소드로 짜는게 일반적이겠네? 유저 테이블이면 getUsers 뭐 이렇게?
폴더 어따가 때려박음? 난 module 폴더 안에 user, order 등 테이블마다 폴더 만들고 각 폴더 안에는 user.service, user.repository, user.entity 처박았는데 dto는 아예 바깥에다 두고 걍 다 처박나
service repository entity(domain) 셋이 1:1로 끊어지는 경우도 있고 아닌 경우도 있는데, 끊어지는 경우가 좀 더 많긴하지. 서비스는 당연히 관련 메소드로 뭉쳐져있음. 그게 분리하는 이유니까
난 entity 라는 단어 자체가 폴더명(패키지명)으론 맞지 않다고 생각해서 controller domain repository service 4개 만들고 각 폴더에 User/Board , UserRepository/BoardRepository 이렇게 작성함. Dto는 규모 커지면 별개 패키지로 구분. 소규모면 controller에서 일괄 관리
디렉구조 짜고있는데 폴더 끊으면 장점이 dto같은거 처박을만한 스키마 폴더에 걍 때려박아면 됌 rea, req용 dto든 테이블의 dto든 ㅇㅇ , 근데 뭉치게하면 그 테이블의 엔티티는 ㄱㅊ은데 그 외 리퀘스트로 오는 그런 dto나 그런거 폴더 어디다 두기 ㅈㄹ 애매함. 어따두지
나누는게 좋다는거네
사실 콘트롤러는 업무적으로 도메인으로 나뉘니까 어차피 1:1:1이 안되는데 서비스랑 콘트롤러 엔티티 모아봐야 의미없다고 생각하긴 했는데 다시 바꿔ㅝ야겠는데
별 로직 안들어가는 테이블은 Service를 안만드는 경우도 있어서 테이블별로 관리하는건 별로 추천 안함
get 메소드로 셀렉트 하는 api일때 필터로 뭐 기간 조건 주고 소트도 주고 리밋주면 그거 리-ㅞ스트 dto 어케받음? 소트나 리밋은 항상 프로퍼티명이 동일한데 필터쪽은 있을수도 없을수도 ㅇㅈㄹ이라서 쫌 ㅈ같네
그럼 콘트롤러에서 다이렉트로 그 레파쓰는건가
그건 동적 쿼리라고 검색해봐 JPA쓰면 표준으로 criteria가 있는데 좀 코드가 지저분하고 별로라 실무에선 querydsl 씀.
다이렉트로 쓰진 않고 다른 서비스에서 쓰는경우임ㅇㅇ