이번 장에서는 그동안 Service Layer에 대한 오해와 객체지향적 개발에 대해 알아보고자 한다.
많은 개발자들이 Business Logic이 Service Layer에 들어간다고 오해를 하고 있다. 나 또한 그렇게 알고 있었다.
아래 코드를 보면.
@Transactional
public Order cancelOrder(int orderId) {
OrdersDto order = ordersDao.selectOrders(orderId);
BillingDto billing = billingDao.selectBilling(orderId);
DeliberyDto delivery = deliveryDao.selectDelivery(orderId);
String deliveryStatus = delivery.getStatus();
if("IN_PROGRESS".equals(deliberyStatus)){
delivery.setStatus("CANCEL");
delivery.update(delivery);
}
order.setStatus("CANCEL");
orderDao.update(order);
billing.setStatus("CANCEL");
deliveryDao.update(billing);
return order;
}
절차지향 프로그래밍 : 물이 위에서 아래로 흐르는 것처럼 순차적인 처리가 중요시 되며 프로그램 전체가 유기적으로 연결되도록 만드는 프로그래밍 기법
위 코드를 도메인 모델에서 처리할 경우
@Transactional
public Order cancelOrder(int orderId) {
OrdersDto order = ordersDao.selectOrders(orderId);
BillingDto billing = billingDao.selectBilling(orderId);
DeliberyDto delivery = deliveryDao.selectDelivery(orderId);
delivery.cancel();
order.cancel();
billing.cancel();
return order;
}
Service Layer에서 해줘야 하는 역할
앞으로 Business Logic 코드들이 도메인들이 담당하도록 Refactoring하면서 객체지향적으로 개발하는 습관을 들여야겠다.
참고
https://wckhg89.tistory.com/13,
스프링 부트와 AWS로 혼자 구현하는 웹 서비스