고객 및 주문 행과 관련된 Order 유형의 집계 루트 엔티티가 있다고 가정 해 보겠습니다. 주문 실체를 생각할 때 ID 없이는 개념화하지 않는 것이 더 자연 스럽습니다. Id가없는 주문은 주문보다 주문 요청으로 더 잘 표현되는 것 같습니다.저장소에 집계 루트를 추가하는 방법은 무엇입니까?
class OrderRepository
{
void Add(Order order)
{
// Insert order into db and populate Id of new order
}
}
내가이 접근 방식에 대해 좋아하는 것은 당신이를 추가하는 것입니다 :
, 나는 보통 사람들이 아이디없이 순서를 인스턴스화 한 다음 저장소 개체를 완료해야 볼 저장소에 명령을 추가하려면 OrderRepository에 인스턴스를 주문하십시오. 그것은 많은 의미가 있습니다. 그러나 주문 인스턴스에는 ID가없고 저장소의 소비자 범위에서는 주문에 Id가 없다는 사실이 여전히 나에게 전혀 들지 않습니다. OrderRequest를 순서의 인스턴스로 정의하고 저장소에 추가 할 수는 있지만 오렌지에서 사과를 파생시킨 다음 오렌지 목록에 추가하는 것과 같습니다.class OrderRepository
{
Order AddOrder(Customer customer)
// It might be better to call this CreateOrder
{
// Insert record into db and return a new instance of Order
}
}
내가이 접근 방식에 대해 좋아하는 것은 순서가 이드가없이 정의되지 않은 점이다 :
또한, 나는 또한이 방법을 보았다. 리포지토리는 주문 인스턴스를 만들고 반환하기 전에 데이터베이스 레코드를 만들고 모든 필수 필드를 수집 할 수 있습니다. 여기서 냄새가 난다는 사실은 저장소의 주문 인스턴스를 실제로 저장소에 추가하지 않는다는 사실입니다.
어느 쪽이든 작동하므로 제 질문은 다음과 같습니다.이 두 가지 해석 중 하나와 함께 살아야합니까? 아니면 삽입을 모델링하는 것이 가장 좋습니다.
이 답변은 비슷하지만 값 개체의 경우 : how should i add an object into a collection maintained by aggregate root입니다. 가치 객체에 관해서 혼란은 없지만 내 질문은 외부 소스 (Auto-Generated Database Id)에서 파생 된 ID를 가진 객체와 관련이 있습니다.
나는 이드가없는 Order가 Order Entity가 아니라고 주장한다. 이 문제를 해결하려면 개체의 상태를 기억해야합니다. '상태'를 시간의 멈춤으로보십시오. 즉, 웹 페이지 요청. 순서를 생성하는 동안 예, 처음에는 ID가 없지만 상태는 아직 완료되지 않았습니다. 저장소에 추가()하여 Order()의 지속 상태를 완료합니다. 완전한. – eduncan911
나는 아직 당신과 동의하지 않는다. 그러나 당신이없이 주문을하고 Id가 잠시 동안 잠깐 동안 엔티티라고 주장하면, 그 일시 중지 동안에는 식별 할 수있는 신원이 없을 것이다. 적어도 의미 론적으로 이것이 엔티티의 정의와 모순이라고 생각합니다. –
정체성은 당신이 생각하는 것처럼 잘리고 건조하지 않습니다. 제 믿음으로, 우리의 정체성은 우리의 개념에서 나온 우리의 독특한 영혼입니다. 그러나 정부에 대해 우리의 정체성은 출생 증명서, 여권 등 여러 가지 방법을 통해 확립 될 수 있습니다. 아이에게 정부에 대한 공식적인 정체성이없는 시점이 있지만 정부는 신원을 필요로하지만 기업을 여전히 실체로 간주합니다. 귀중한 작은 아기 및 정부 (ints가 더 사용자 친화적 인 어쨌든입니다!)로 저장소로 생각하십시오 :) – tuespetre