클라이언트가 뱃지고유번호를 변경한 순서대로 나열한 문자열("3, 2, 1, 4" )과 함께 /app/ajax/collect/updateOrder/ 요청을 보내면 DispatcherServlet은 이 요청을 받아 CollectController가 요청을 처리하도록 보낸다. 그러면 CollectController는 Service, Dao를 거쳐 DB에 있는 유저-뱃지(usr_bdg) 테이블에 있는 순서 컬럼을 변경한다.
CollectController
@Controller("ajax.collectController")
@RequestMapping("/ajax/collect")
public class CollectController {
@Autowired CollectService collectService;
@PostMapping("updateOrder")
public String updateOrder(String order, HttpSession session, HttpServletRequest request) throws Exception {
String[] orders = order.split(",");
List<Collect> collects = new ArrayList<>();
for (int i = 0; i < orders.length; i++) {
Collect collect = new Collect();
collect.setUser((User) session.getAttribute("loginUser"));
collect.setBadge(new Badge().setNo(Integer.parseInt(orders[i])));
collect.setOrder(i);
collects.add(collect);
}
collectService.updateAllOrder(collects);
return "redirect:" + request.getHeader("Referer");
}
}
CollectService
@Service
public class DefaultCollectService implements CollectService {
CollectDao collectDao;
NotificationDao notificationDao;
//..
@Override
public void updateAllOrder(List<Collect> collects) throws Exception {
for (Collect collect : collects) {
collectDao.updateOrder(collect);
}
}
//..
}
Controller에 비즈니스 로직이 있어 재사용이 어렵다. Controller는 Controller의 역할만 수행하도록 만들어줘야 한다.
Solution
재사용과 유지보수를 위해 현재 Controller에서 처리하고 있는 Business Logic을 Service Layer에서 처리하도록 변경한다.
Description
현재 뱃지 순서 변경 과정을 그림으로 표현하면 다음과 같다.
클라이언트가 뱃지고유번호를 변경한 순서대로 나열한 문자열(
"3, 2, 1, 4"
)과 함께/app/ajax/collect/updateOrder/
요청을 보내면DispatcherServlet
은 이 요청을 받아CollectController
가 요청을 처리하도록 보낸다. 그러면CollectController
는Service
,Dao
를 거쳐 DB에 있는 유저-뱃지(usr_bdg
) 테이블에 있는 순서 컬럼을 변경한다.CollectController
CollectService
Controller에 비즈니스 로직이 있어 재사용이 어렵다. Controller는 Controller의 역할만 수행하도록 만들어줘야 한다.
Solution
재사용과 유지보수를 위해 현재 Controller에서 처리하고 있는 Business Logic을 Service Layer에서 처리하도록 변경한다.
Progress