[리팩토링] 예시 코드 일부를 분석해보기

현재 상황


@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<상품>();
....
  1. 딱봐도 컨트롤러인지 서비스인지 구분이 안된다

    컨트롤러에서는 서비스에 대한 그 호출만 이루어져야 되지 별도의 다른 로직이 존재하면은 일단은 그 로직에 대한 구분이 힘들기 때문에…

  1. 세터를 VO 로직 안으로 다 옮겨야 될 것 같습니다.

    캡슐화에 의거해서 세터를 v o 로 옮기는 것이 맞음.

    외부에서는 그 안에 있는 속성에 대해서 알 필요가 없는 거죠.

  1. 하나의 API 에서 모든 동작을 수행해서 모든 걸 던져주겠다, 이런 것보다 차라리 그냥 컨트롤러 분화해서.

    프런트단에서 그 분화한 api 를 여러 번 받는 게 차라리 낫지 않나 생각도 듭니다.

    그리고 추가적으로 서비스 메서드도 나눠야 될 필요성이 느껴지는 것 같습니다.

  1. 또 하나 걱정되는 것이 있는데 만약에 JSP 에서 API 을 받았을 때 바로 동작하게 하는 방법을 어떻게 구현을 하느냐, 그것도 좀 헷갈리는 것 같습니다.

    ⇒ 페이지 안에서 API 를 정의해서 수행하는 경우에 대해서는?

    페이지마다 그 AJAX API 를 적어주는 경우에는 상당히 그 페이지에 대한 코드가 상당히 더러워지기 때문에

    어떤 JS 하나의 파일에서 모든 CRUD 작업을 수행할 수 있도록 통일시킨 어떤 그 코드가 필요할 것 같습니다.


Uploaded by N2T