Order 집계가 주어지면 Order W OrderItem으로 구성됩니다. 순서는 집계 루트입니다. 주문을하는 것은 데이터 일관성을 위해 트랜잭션을 요구하는 유일한 시나리오입니다. 또는 적어도 트랜잭션을 필요로하지 않는 orderItem과 orderItem에서 데이터를 변경하는 시나리오가 많이 있습니다.집합에서 모든 데이터 변경이 트랜잭션에 있어야하는 이유는 무엇입니까?
DDD가 실행되기 전에 트랜잭션은 메소드를 만드는 동안 결정됩니다. 일관성을 유지하기 위해 일반적으로이 방법이나 동작이 트랜잭션에 있어야하는지 생각합니다.
DDD는 집계 루트에 의해 노출 된 모든 가능한 동작에 대한 트랜잭션을 제안합니다. 실제로 교착 상태가 더 심해질 수 있습니다.
나는 모든 데이터가 트랜잭션에서 집계 루트의 동작을 변경하지 않아도된다고 생각합니다.
예를 들어 배송 세부 정보 만 변경하면 거래가 필요한 이유가 무엇입니까? 주문 항목 만 삭제하는 경우 거래가 필요한 이유는 무엇입니까? 따라서 Order.UpdateOrder 및 Order.DeleteOrderItem 메서드의 경우 트랜잭션을 고려하지 않아야합니다.
내가 무엇인가 놓친가요?
교착 상태 가능성이 게시물을 확인하십시오. https://stackoverflow.com/questions/34662578/in-domain-driven-design-why-would-you-use-an-aggregate-object-and-what-key-pr – Costa
나는 모든 행동이 아니라고 말합니다. 루트 집계에서 트랜잭션에 있어야합니다. 일관성 문제가 발생할 수있는 경우 트랜잭션을 고려해야하며 해당 동작을 분석해야합니다. 예를 들어 배송 세부 정보 만 변경하는 경우 거래가 필요한 이유는 무엇입니까? 주문 항목 만 삭제하는 경우 거래가 필요한 이유는 무엇입니까? 따라서 Order.UpdateOrder 및 Order.DeleteOrderItem 메서드에서 트랜잭션을 고려하지 않아야합니다. – Costa
@Costa 그러나 이러한 경우 트랜잭션이 필요합니다. 그렇지 않으면 저장소 구현에 따라 복잡해질 수 있습니다. 집계는 명령을 처리 할 때/전에 완전히로드되므로 지연로드가 없어야합니다. –