You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Order 생성 시점에 수반되어야 하는 로직들이 많아서 도메인 서비스를 만들었습니다.
현재
- `SingleStoreOrderValidator`: 같은 가게의 메뉴를 주문했는지 검증
- `PriceChecker`: 최소 주문금액 이상을 주문했는지 검증
- `StockRequester`: 재고가 있는지 확인 및 차감
- `WithdrawPointService`: 포인트가 있는지 확인 및 차감
`StockRequester`, `WithdrawPointService`는 기능적인 성격이 강해서 하단의 주제에 대해 논의가 필요합니다.
세부 주제
1.도메인 서비스에 `@Transactional`을 붙여야 하는가
order/domain 패키지 하위의 StockRequester, WithdrawPointService 에 @transactional를 명시해야하지 않을까요?
OrderCreationService(트랜잭션) -> Order -> WithdrawPointService/StockRequest
의 흐름을 생각하시어 트랜잭션 애노테이션을 사용하지 않는 것으로 생각되는데, 맞으실까요?
저는 그럼에도 @transactional은 명시해야한다고 생각합니다. 누군가 의도를 모르고 Service 로직을 호출할 수 있기 때문입니다!
vs
기존의 Service와 분리하기 위한 방법을 찾아봐야 할 것 같아요.
그런데 @transactional이 붙어버리면 더 혼동이 올 것 같습니다.
그래서 제 생각에는 패키지를 분리하고 @service -> @component로 변경해둔 현재 상태가 더 좋은 방안이라고 생각합니다.
2.WithdrawPointService 도메인에서 처리하는 게 맞나
withdrawPointService 이게 도메인 서비스같은데, 해당 워딩이 아직은 저에게 와닿지는 않는 것 같습니다..!
주문 객체 "생성" 시점에 payAccount 인출을 강제하도록 해야할까?라는 의문이 들어요!
OrderService에서 전반적인 주문 로직의 비즈니스 "흐름"을 담당하도록 하는게 책임 분리가 용이할 것으로 여겨집니다.
reacted with thumbs up emoji reacted with thumbs down emoji reacted with laugh emoji reacted with hooray emoji reacted with confused emoji reacted with heart emoji reacted with rocket emoji reacted with eyes emoji
-
배경
Note
#80 에서 파생된 논의 입니다.
세부 주제
Beta Was this translation helpful? Give feedback.
All reactions