procompiler / developer-village

😈 개발자를 위한 소셜 네트워크 서비스 🌐
34 stars 7 forks source link

Collect Controller의 비즈니스 로직 Service Layer로 이동 #69

Open hayeon17kim opened 3 years ago

hayeon17kim commented 3 years ago

Description

현재 뱃지 순서 변경 과정을 그림으로 표현하면 다음과 같다.

image

클라이언트가 뱃지고유번호를 변경한 순서대로 나열한 문자열("3, 2, 1, 4" )과 함께 /app/ajax/collect/updateOrder/ 요청을 보내면 DispatcherServlet은 이 요청을 받아 CollectController가 요청을 처리하도록 보낸다. 그러면 CollectControllerService, 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에서 처리하도록 변경한다.

Progress