현재 상황
@RequestMapping(value="주소", method=RequestMethod.GET)
public String 상품리스트 불러오기(HttpServletRequest request, Model model, 도메인종류, @PathVariable String 상품분류, @ModelAttribute("검색을 위한 DTO")검색을위한DTO 검색DTO ) throws ParseException{
상품종류검색을위한 DTO 선언
상품종류검색을위한 DTO . set상품종류ID
상품종류검색을위한 DTO. set서브도메인을 위한 메서드(도메인종류. 현재사이트의 도메인) // 서브도메인으로 구성된 경우 별도 db분기처리를 위함
상품종류VO 상품종류 = 상품서비스.상품리스트 불러오기(상품종류검색을위한 DTO);
if( 상품종류VO 가 NULL ) => 해당하는 상품종류가 없다고 에러를 발생시킨다.
model -> 상품종류 VO 모델에 담기
//---------------------------
// 게시글
//---------------------------
상품검색을 위한 DTO .서브도메인을 위한 메서드()
상품검색을 위한 DTO . DB컬럼기준 정렬조건 설정()
상품검색을 위한 DTO. 검색을 할 상품 종류 설정()
상품검색을 위한 DTO. 상단고정상품을 노출할지 설정 ( 비노출 설정 )
상품검색을 위한 DTO. 한글 인코딩이 깨지는 경우를 대비한 기능();
if(상품검색을 위한 기본 페이지사이즈 <= 상품종류에 대한 기본 페이지사이즈){
종류에 대한 기본 페이지사이즈로 검색조건을 맞춤
}
int 총 개수= 상품서비스.상품검색 조건에 맞는 총 상품개수
List<상품> 상품리스트= 상품서비스.상품검색 조건에 맞는 상품조회 with Paging
페이징과 관련된 별도 페이징 클래스 생성 ( 상품리스트, 총 개수, 상품검색 조건 ) -> 유저나 어드민단의 별도 페이징관련 (1페이지 2페이지... 소스를 내부적으로 만듬)
model -> 페이징된 상품 페이징 클래스 반환
boolean 상품에 관련된 관리자 여부 = 인터셉터에서 별도 관리자 여부를 체크한 값을 여기서 조회함.
//---------------------------
// 공지글 - 1페이지거나 게시판 설정에 따라서 출력 on/off
//---------------------------
if( 상품종류검색을위한DTO.get현재페이지() == 1 || 상품종류설정VO.매 페이지마다 공지글 출력하는지 여부 가져오는 메서드 ){
상단고정상품검색을위한DTO 선언
상단고정상품검색을위한DTO 도메인설정을 위한 setter
상단고정상품검색을위한DTO 기본정렬조건 설정을 위한 setter
상단고정상품검색을위한DTO 공지검색을 위한 상품종류 setter
상단고정상품검색을위한DTO 공지글이 true 인 게시물 가져오기위한 setter
List<상품> 필터링되지 않은 상단상품리스트= 상품서비스.상품리스트 불러오기(상단고정상품검색을위한DTO);
List<상품> 필터링된 상단상품리스트= new ArrayList<상품>();
....
- 딱봐도 컨트롤러인지 서비스인지 구분이 안된다
컨트롤러에서는 서비스에 대한 그 호출만 이루어져야 되지 별도의 다른 로직이 존재하면은 일단은 그 로직에 대한 구분이 힘들기 때문에…
- 세터를 VO 로직 안으로 다 옮겨야 될 것 같습니다.
캡슐화에 의거해서 세터를 v o 로 옮기는 것이 맞음.
외부에서는 그 안에 있는 속성에 대해서 알 필요가 없는 거죠.
- 하나의 API 에서 모든 동작을 수행해서 모든 걸 던져주겠다, 이런 것보다 차라리 그냥 컨트롤러 분화해서.
프런트단에서 그 분화한 api 를 여러 번 받는 게 차라리 낫지 않나 생각도 듭니다.
그리고 추가적으로 서비스 메서드도 나눠야 될 필요성이 느껴지는 것 같습니다.
- 또 하나 걱정되는 것이 있는데 만약에 JSP 에서 API 을 받았을 때 바로 동작하게 하는 방법을 어떻게 구현을 하느냐, 그것도 좀 헷갈리는 것 같습니다.
⇒ 페이지 안에서 API 를 정의해서 수행하는 경우에 대해서는?
페이지마다 그 AJAX API 를 적어주는 경우에는 상당히 그 페이지에 대한 코드가 상당히 더러워지기 때문에
어떤 JS 하나의 파일에서 모든 CRUD 작업을 수행할 수 있도록 통일시킨 어떤 그 코드가 필요할 것 같습니다.
Uploaded by N2T
'자바 > 리팩토링' 카테고리의 다른 글
[리팩토링]@ Controller 에서 API 를 호출하여 사용할 수 있는 restTemplate (0) | 2023.09.23 |
---|---|
[리팩토링] 현재 코드 상황 분석하기 (0) | 2023.09.21 |
[리팩토링] 리스트 조회에서 api 만 분리하기 (0) | 2023.09.21 |
[리팩토링] DTO 가 너무 분화될 것 같은 경우 어떻게 해야할까? (0) | 2023.09.21 |
[리팩토링] DTO 에서 VO 간의 전환 메서드를 편하게 사용하려면? - MapStruct (0) | 2023.09.21 |