-
Notifications
You must be signed in to change notification settings - Fork 0
Open
Description
코드에다 달아놓은거
9378a87#comments
Controller layer와 Service layer의 책임에 대하여..
컨트롤러와 서비스 계층의 책임은 명확히 분리되어야 함
- 컨트롤러 : 요청을 받아 그에 매핑되는 서비스로 전달만 한다
- 서비스 : 핵심 비즈니스 로직을 담당한다
이렇게만 들으면 뭔 개소린가 싶지만 쉽게 말하면 컨트롤러 메소드에서 할게 1도없다는 거임
예시를 위해 BbsController > getBbsReactList 메소드를 가져와 봤습니다
@GetMapping("/bbss")
public Map<String, Object> getBbsReactList(
@RequestParam("search") String search,
@RequestParam("choice") String choice,
@RequestParam("pageNumber") int pageNumber
) {
logger.info("BbsController getBbsReactList : " + new Date());
BbsParam param = new BbsParam(search, choice, pageNumber);
int sn = param.getPageNumber();
int start = sn * 10 + 1;
int end = (sn + 1) * 10;
param.setStart(start);
param.setEnd(end);
List<BbsDto> list = service.getBbsSearchPageList(param);
int count = service.getBbsCount(param);
Map<String, Object> map = new HashMap<String, Object>();
map.put("bbslist", list);
map.put("cnt", count);
return map;
}로그 찍는건 제외하고, 그 아래부터 보면 파라미터 객체를 만들고 ~ 서비스 호출하고 Map 객체를 만드는 로직이 컨트롤러 계층에 있습니다
하지만 이게 모두 서비스 계층으로 옮겨져야합니다
즉 BbsService > getBbsSearchPageList 메소드에서 위 로직을 모두 담당해야하는 것입니다
이걸 리팩토링 해보면...
BbsController
@GetMapping("/bbss")
public Map<String, Object> getBbsReactList(
@RequestParam("search") String search,
@RequestParam("choice") String choice,
@RequestParam("pageNumber") int pageNumber
) {
logger.info("BbsController getBbsReactList : " + new Date());
Map<String, Object> response = service.getBbsSearchPageList(search, choice, pageNumber);
return response;
}BbsService
public Map<String, Object> getBbsSearchPageList(String search, String choice, int pageNumber) {
BbsParam param = new BbsParam(search, choice, pageNumber);
int sn = param.getPageNumber();
int start = sn * 10 + 1;
int end = (sn + 1) * 10;
param.setStart(start);
param.setEnd(end);
List<BbsDto> list = dao.getBbsSearchPageList(param);
// int count = getBbsCount(param);
// 그냥 몇갠지 세려면 DB 안찔러도 될듯?
int count = list.size();
Map<String, Object> map = new HashMap<String, Object>();
map.put("bbslist", list);
map.put("cnt", count);
return map;
}요렇게 되겠네요
컨트롤러에서는 받을걸 고대~로 서비스로 넘겨주기만 하고, 서비스는 컨트롤러의 리턴값에 맞는 값을 어떻게든 뽑아주는걸 볼수있죠잉
그리고 Map으로 response 객체를 생성하는것보다
@RequestBody로 받는 request dto처럼 response에도 dto를 따로 만들어 주면 좋습니다!
@Getter
public class BbsListResponse {
private List<BbsDto> list;
private int count;
}요런식으로.. (자바 클래스를 json으로 직렬화할때 @Getter 필수임)
끗
(늦은시간에 귀찮게해서 정말 죄송합니다)
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels