Repositroy의 커넥션을 파라미터로 넘기는 작업을 제거하다 애매한 부분이 발견됐다.
public class OrderRepository {
...
public Orders save(Connection conn, Orders order) throws SQLException {
try {
conn.setAutoCommit(false);
insertOrder(conn, order);
insertOrderItems(conn, order.getOrderItems(), order.getId());
conn.commit();
return order;
} catch (SQLException e) {
conn.rollback();
throw e;
}
}
...
}
OrderRepository에서 Order를 저장할 때 OrderItem까지 저장하는 부분이다.
Order: 언제 주문했고, 총액 얼마인지 ...
OrderItem: 어떤 Food를 주문했고, 주문 당시 가격이 얼마인지 ...
Order안에서 OrderItem을 관리하게 만드려했다.
그래서 OrderService라는 도메인 서비스 내부에서만 OrderItem을 생성하도록 설계했다.
근데 이런 애플리케이션의 로직이 Repository까지 반영되면서 잘못된 것 같다.
Repository에서 Order를 저장할 때 내부 OrderItem까지 저장하는 것이다.
Cascade 같은 것을 구현하려는 욕심이였던 것 같다.
이것을 유지하면서 커넥션을 없애자니 애매한 부분이 많았다.
결론은 Repository를 분리하는 것이다.
OrderItemRepository를 만들고 OrderRepository내에 OrderItem 관련 로직을 없애야겠다.
그게 더 자연스러운 것 같다.