일부 상점에서는 백엔드를 구현 중이며, 프론트 엔드에서 완전히 작성되었으며 최종 상태 (데이터) 만 백엔드로 전송됩니다. DDD를 CQRS/ES와 함께 사용하려고합니다. (예를 들어, 일반화)현재 명령이 필요하지 않다면 큰 명령을 작은 명령으로 분해하는 것이 유리합니까?
해피 시나리오 쓰임새 :
- 사용자, 장바구니 및 CartItem이있는 점을 감안.
사용자
사용자가
사용자가 주소를 선택할 수 있습니다
사용자 유형의 Y를 CartItem을 추가 할 수 있습니다 CartItem Y의 지정 (일부 PARAMS 설정) 할 수 있습니다 쇼핑 카트에 형 X의 CartItem을 추가 할 수 있습니다 그의 adresses에서 (그들을 만드는 것은 다른 BC의 )
사용자가 주문할 수 있습니다
이제 모든 것이 프론트 엔드에서 발생하므로 내 유일한 전달 메커니즘은 이제 GraphQL의 일부 원시 데이터입니다. 내가 응용 프로그램 레이어에서 CreateNewOrderFromGraphQL 메소드 ($ someGraphQLData)를 가지고 있어야합니까? 그건 단지 상대적으로 큰 CreateNewOrderCommand를 생성하기 때문에 (주소, CartItems, 프로모션 코드 등을 포함해야하기 때문에) 명령 버스를 통해 전체 주문을 생성하는 내 도메인 모델로 전달합니까?
또는 내 도메인 모델을 프론트 엔드에서와 같은 방식으로 생각해야하며, 그 다음 CreateNewOrderFromGraphQL에서 CreateCartCommand, AddItemToCartCommand, CreateOrderCommand (카트 ID, 주소 ID , 그리고 어쩌면 몇 가지 세부 사항) 순차적으로 호출 할 수 있습니까?
내가 고려해야 할 사항은 무엇입니까?
귀하의 불변량은 무엇입니까? 어떤 조건에서 '주문'을 만들고 배치 할 수 있습니까?'Aggregate''의 불변량을 기반으로 명령을 만들어야합니다. –
@ ConstantinGALBENU 1) 주어진 id의 사용자가 존재하는 경우 2) 주어진 id의 주소가 존재하는 경우 3) 장바구니가 유효하다면, 주문 장바구니의 각 CartItem이 자신의 불변 값을 전달한 것을 의미합니다. 그래서, 그것을 깨는 것이 더 현명하다고 가정합니다. 그래서 먼저 장바구니를 만든 다음, 하나씩 항목을 추가하고 결국에는 장바구니의 ID를 순서대로 전달할 수 있습니다. 그렇다면 결국 모든 항목이있는 전체 주문을 생성하지 못하게하는 대신 장바구니를 만드는 동안 (그리고 아마도 많은 단계에서) 특정 항목에 대한 오류를보고 할 수 있습니다. – Tom
프런트 엔드를 제어 할 수 있습니까? 이상적으로 DDD를 사용하면 사용자의 의도가 UI의 작업과 백엔드에 해당합니다. 그렇게 할 수 없다면 나는 할 수있는 것처럼 실제로 노력할 것이고 프론트 엔드를위한 외관을 만들어 프론트 엔드를 마치 명령 자체를 생성하는 것처럼 보이게 만들 것이다. 어느 날 하루 프론트 엔드는 이상적인 상황으로 업데이트/업그레이드 될 수 있지만, 그렇지 않은 경우 백엔드는 영향을받지 않습니다. – Arwin