[리팩토링]출고 → 배송 → 도착 순서 보장을 어떻게 할 수 있을까?

출고 배송 도착 등의 로직을 별도 DB 에 구성해둘 수 있다.

데이터베이스 구성

데이터베이스에서는 OrderOrderStatus 두 개의 테이블을 구성하여 주문과 주문 상태를 관리합니다.

  • Order 테이블: 주문 관련 정보를 저장하며, ORDER_STATUS 필드를 통해 현재 주문의 상태를 기록합니다.
  • OrderStatus 테이블: 가능한 주문 상태와 그에 대한 설명을 저장합니다.
    • OrderStatus 테이블의 CODE_NAME 필드에 정의된 상태 값만이 Order 테이블의 ORDER_STATUS 필드에 기록될 수 있습니다.

어플리케이션 로직

어플리케이션에서는 ORDER_STATUS라는 ENUM 클래스를 사용하여 주문 상태를 관리합니다.

  • ENUM 클래스: DB의 OrderStatus 테이블과 동일한 상태 값을 가집니다.
  • 상태 전이 검증: 주문 상태를 변경하려 할 때, ENUM 클래스 내의 메서드를 사용하여 이전 상태를 확인하고, 필요한 경우 상태 전이를 허용하거나 거부합니다.
    • 예를 들어, 상품이 '배송중' 상태에서만 '배송완료' 상태로 변경될 수 있도록 검증할 수 있습니다.
    • 만약 예상치 못한 상태 전이가 요청되는 경우 (예: '상품준비중'에서 바로 '배송완료'로 변경), 이를 방지하고 오류 메시지를 반환할 수 있습니다.

이런 식으로, 어플리케이션 로직은 주문의 상태 전이를 안전하고 일관되게 관리할 수 있도록 돕습니다.

예외 처리

주문 상태의 비정상적인 전이를 방지하기 위해, 별도의 검증 메서드를 구현할 수 있습니다. 이 메서드는 상태 전이 요청이 받아들일 수 있는지 확인하고, 그렇지 않은 경우 오류 메시지를 반환하여 어플리케이션의 다른 부분에서 적절한 처리를 할 수 있게 합니다.


생각한 다른 문제점

  • 고려중.

Uploaded by N2T