2013-02-08 1 views
0

스프링 컨트롤러에서 서비스 의 항목 목록을받은 다음 컨트롤러의 사용자 정의 코드를 사용하여 새 필터 된 목록 을 작성합니다. 서비스에서 회수 된 목록입니다.스프링 서비스에서 반환 된 결과를 필터링하는 코드를 추가 할 위치

나는이 필터링 코드가 컨트롤러에서 일어나야한다고 생각하지 않습니까?

@Controller 
    public class MyController { 
    @Autowired 
    private MyService myService; 

     @RenderMapping 
     public String getValues(ModelMap modelMap){ 

      List<String> = myService.getNewValues(); 


      List<String> filteredList = ...... 
      /** 
       Code here to process the List and convert it to 
       specific List 
      */ 
      modelMap.addAttribute("values", filteredList); 
     } 
} 

은 필터링 서비스 구현 층에서 개최해야 : ​​여기

내 컨트롤러?

그래서 myService.getNewValues(); 대신 결과를 필터링하는 새로운 방법을 사용해야합니다. myService.getNewFilteredValues();?

참고 :이 방법 myService.getNewFilteredValues()는 새로운 방법이 될 것이며, 개인적으로 내가 myService.getValues(); 노출 될 수 MyController

+0

myService.getNewFilteredValues ​​()는 MyController보다 효율적으로 수행 할 수 있습니까? – Andre

+0

@Andre ive는 "메소드 myService.getNewFilteredValues ​​()가 새로운 메소드가 될 것이고 컨트롤러에 지정된 필터링 코드와 동일한 코드를 포함 할 것입니다."따라서 MyController 구현과 마찬가지로 효과적 일 것입니다. –

+0

myService.getNewValues ​​()가 호출되었는지 여부 다른 곳에서? – Andre

답변

0

에 지정된 필터링 코드와 동일한 코드를 포함하고 서비스가 호출자의 필터링 및 기타 로직을 숨길 수있게된다.

+0

myService.getValues ​​(); 이미 노출되어있다. –

0

필터링이 사업 논리의 일부인 경우 서비스 수준으로 배치합니다. 튜너가 getValues()

UPD를 호출하는 서비스 getFilteredValues()에 메소드 추가 : 컨트롤러 특정 로직 (예 : 전송 된 데이터의 양을 줄이기위한 몇 가지 기술적 필터링) 인 경우 제어기 레벨에서 그대로 둡니다.

관련 문제