출고 배송 도착 등의 로직을 별도 DB 에 구성해둘 수 있다.
데이터베이스 구성
데이터베이스에서는 Order
와 OrderStatus
두 개의 테이블을 구성하여 주문과 주문 상태를 관리합니다.
- Order 테이블: 주문 관련 정보를 저장하며,
ORDER_STATUS
필드를 통해 현재 주문의 상태를 기록합니다.
- OrderStatus 테이블: 가능한 주문 상태와 그에 대한 설명을 저장합니다.
OrderStatus
테이블의CODE_NAME
필드에 정의된 상태 값만이Order
테이블의ORDER_STATUS
필드에 기록될 수 있습니다.
어플리케이션 로직
어플리케이션에서는 ORDER_STATUS
라는 ENUM 클래스를 사용하여 주문 상태를 관리합니다.
- ENUM 클래스: DB의
OrderStatus
테이블과 동일한 상태 값을 가집니다.
- 상태 전이 검증: 주문 상태를 변경하려 할 때, ENUM 클래스 내의 메서드를 사용하여 이전 상태를 확인하고, 필요한 경우 상태 전이를 허용하거나 거부합니다.
- 예를 들어, 상품이 '배송중' 상태에서만 '배송완료' 상태로 변경될 수 있도록 검증할 수 있습니다.
- 만약 예상치 못한 상태 전이가 요청되는 경우 (예: '상품준비중'에서 바로 '배송완료'로 변경), 이를 방지하고 오류 메시지를 반환할 수 있습니다.
이런 식으로, 어플리케이션 로직은 주문의 상태 전이를 안전하고 일관되게 관리할 수 있도록 돕습니다.
예외 처리
주문 상태의 비정상적인 전이를 방지하기 위해, 별도의 검증 메서드를 구현할 수 있습니다. 이 메서드는 상태 전이 요청이 받아들일 수 있는지 확인하고, 그렇지 않은 경우 오류 메시지를 반환하여 어플리케이션의 다른 부분에서 적절한 처리를 할 수 있게 합니다.
생각한 다른 문제점
- 고려중.
Uploaded by N2T
'자바 > 리팩토링' 카테고리의 다른 글
[테스트코드] Mockito API (0) | 2023.10.22 |
---|---|
[리팩토링]동시성을 가지는 서비스에 대한 테스팅 - ExecutorService 와 Future (0) | 2023.10.10 |
[리팩토링]Spring boot 2.7 에서 schema.sql 한글 깨짐 (0) | 2023.10.07 |
[리팩토링] Mybatis 에서 XML 사용하지 않는 방법 (동적쿼리는 불가능..) (0) | 2023.10.07 |
[리팩토링] 장바구니 기능의 경우 SOFT DELETE 와 HARD DELETE 중에 뭘 사용해야할까? (0) | 2023.10.07 |