0

신원 별 다른 집계 (AR2)를 참조하는 집계 루트 (AR1)가 있습니다. 즉 여기에 설명 된대로 http://www.informit.com/articles/article.aspx?p=2020371&seqNum=4집계 루트 도메인 서비스를 호출하는 집계 루트.

이제 AR1의 제 방법 중 하나에서 수표를 수행하기 위해 AR2의 전체 개체에 액세스해야합니다. 나는 AR2DomainService라는 도메인 서비스를 만들었고 AR1의 메소드에 주입 중이다. 예 :

public class AR1 
{ 
    public Guid AR2Id; 

    public void DoSomething(IAR2DomainService, aR2DomainService) 
    { 
     AR2 ar2 = ar2DomainService.GetById(Ar2Id); 

     if(ar2.status != Status.OK) 
      //throw exception 

     //do some processing. 

    } 

    public bool DomSomething2(IAR2DomainService, ar2DomainService) 
    { 
      return ar2DomainService.DoSomething(Ar2Id); 
    } 


} 

이 코드가 맞습니까?

+0

저는 AR2를 수정 한 적이 결코 없다는 것을 명심하십시오 ... 나는 단지 속성을 읽는 중입니다. –

+2

이 코드가 실행되는 동시에 ar2 상태가 수정되면 어떻게됩니까? 무효 상태로 끝날 수도 있습니다. 또한 도메인 서비스는 집계를 rehydrate 의미하지 않으며, 저장소는 있습니다. 이 외에도 AR 메서드에서 도메인 서비스를 주입하는 데는 아무 문제가 없지만 항상 가장 명시적인 종속성을 전달하려고 시도합니다. 예 : ar2를 검색하는 서비스보다는 ar2를 전달합니다. – plalx

+0

"소스에서 수익자 계정으로 금액 이전"과 같은 실제 도메인 의미를 사용하여 비즈니스 시나리오를 설명 할 수 있습니까? 그렇지 않으면 우리는 올바른 방향으로 당신을 도울 수 없을 것입니다. –

답변

1

plalx가 지적했듯이 도메인 서비스는 집계를 검색하지 않습니다. 내가 할 수있는 것은 응용 프로그램 서비스/명령 처리기의 모든 것을 조정하는 것입니다. 연결된 집계 ID를 AR1에서 읽고 리포지토리를 통해 가져옵니다. 그런 다음 AR2에서 관련 정보를 추출하여 AR1의 메소드에 매개 변수로 전달할 수 있습니다. 이 매개 변수가 작을수록 좋습니다. 이상적으로는 AR2을 전적으로 전달하지 않고 필요한 최소 정보가 포함 된 값 객체 만 전달하면됩니다 (거래의 일부로 AR2AR1에 업데이트하려는 유혹을 받고 싶지는 않음).

+0

나는 AR2를 사용하여 실제로 그것을 업데이트하지 않는 검사. 도메인 서비스를 삽입하거나 응용 프로그램 서비스의 실제 값을 주입할지 여부 즉 동시성의 문제가 아닌가? –

+0

예. 나는 당신의 질문의 의존성 측면에 대해서만 언급했다. 동시성 문제는 'AR1'이 몇 밀리 초의 'AR2'데이터에 대해 추론하는 것이 허용된다면 문제가되지 않을 수도 있습니다. 이는 실제 도메인을 알지 못해도 알기가 어렵습니다. 허용되지 않는 경우 집계 디자인 검토, 궁극적 인 일관성 전략 도입 또는 적용 트랜잭션을 2 개의 집계로 확장해야합니다 ("집계 트랜잭션 경계"방법에서는 권장하지 않음). – guillaume31

+0

내 특정 시나리오에서 병행 성은 문제가 아니므로 AR2를 AR1의 메소드에 주입하고 검사를 수행 할 것입니다. –