Aropa-Coffee를 구현하다 생각할 거리가 생겼다. 상황은 이렇다.
단순하게 생각하면 고객이 주문을 하므로 Client Entity에 주문의 책임이 있어야 될 것이니, 이 메시지를 수신하는 order
메서드가 있어야 할 것 같다. 그래서 그냥 그대로 구현을 했다.
그런데 생각해보니까 주문을 하라는 메시지는 행위 그 자체다. 그러니까 유스케이스인데, 결국 이 메시지를 수신하는것은 Application이다. 그러면 이에 대한 응답은 바로 그냥 주문을 만드는 것이다. 사실 엄밀히 말하면 주문을 하라가 아니라 주문내역을 만들어라이다. 그러니까 그냥 Application에서 Order
를 만들면, 그것이 주문 내역을 만드는 행위니까 이대로 끝내면 될 것 같다.
그런데 문제는 주문의 지불 방법이 외상이면, 외상(Credit)도 만들어야 한다. 그러면 이 책임은 누가 갖는 걸까?
이런 고민들이 있어서 okky
에 질문도 올려봤는데 아직까지 답변이 달리진 않았다. 그런데 네이버 지식인에서 답변도 달고 잠깐 이 고민에서 벗어나 다른 일을 하다가 다시 돌아와보니, 생각이 정리되었다!
지금은 이렇게 하기로 결정했다.
OrderApplication
이 처리한다.Order
는 Client
가 필수다. Client
가 Order
를 생성할 책임을 갖는게 맞는 것 같다(어차피 요청온 clientId
값을 검증해야되기 때문에 Client
Entity를 생성하는게 맞는 것 같다).Credit
을 만들어라는 비즈니스 규칙이다. 이 규칙이 Application에 있으면 안되므로, Order
가 Credit
의 생성을 책임진다. 왜냐하면 결제방법에 대한 정보전문가는 Order
이기 때문이다.이게 최선인지는 모르겠지만, 일단 오늘은 이게 최선인 것 같다. (어차피 정답은 없잖아~~🙄)