0

나는 일반적인 저장소 웹 주위에 떠 그 중 하나 또한이 세 자녀 개체의 X, Y 및 Z를여러 respositories

이있는 기업이를 루트 aggreate에 여러 아이 엔티티를 추가 또는 전화 .. . 내 서비스 방법 AXYZ에서

()

내가 여러 저장소을 호출 (의사 코드)

repoA.Update(objectA); 
repoY.Delete(objectA.PK_Id); 

foreach: 
    objectX.FK_ID = objectA.PK_ID; 
    repoX.Add(objectX); 

foreach: 
    objectY.FK_ID = objectA.PK_ID; 
    repoY.Add(objectY); 

foreach: 
    objectZ.FK_ID = objectA.PK_ID; 
    repoZ.Add(objectZ); 

    _unitOfWork.Commit(); 

지금 나 자신에게 물었다, 충분히 O를 안 R 나은 단지 대신 아이들 컬렉션이 흥분 되나요 추가 작업을 수행 repoXXX에 모든 foreach.Add 작업을 수행하는

repoA.Update(objectA); 
repoY.Delete(objectA.Id); 

foreach: 
    objectA.CollectionX.Add(objectX); 
    objectA.CollectionY.Add(objectY); 
    objectA.CollectionZ.Add(objectZ); 

    _unitOfWork.Commit(); 

(!) 참고 : repoY에 대한 삭제 작업이 inmemory 할 수 없습니다

objects_Y가 컨텍스트에로드되지 않기 때문입니다.

당신은 어떻게 생각하십니까?

나는이 문제를 도메인 구동 디자인과 함께 태그를 붙였습니다. 아마도이 시나리오는 이와 관련이 있습니다.

답변

0

실제로 DDD 관점에서이 접근법을 사용하고 있다면 집계 루트 인 A뿐만 아니라 모든 하위 엔티티에 대한 리포지토리가 있다는 것이 당연합니다. 분명히 모든 프로젝트가 다르고 DDD는 일반적으로 의미있는 일련의 지침입니다. 그러나 X, Y 및 Z가 집계 루트로 재생할 역할이 없으면 repoA은 네 개의 엔터티를 모두로드하고 유지하는 기능을 처리 할 것으로 예상됩니다. RepositoryA은 하나의 레코드에 모든 레코드가 저장되어 있지 않은 경우로드를 처리하고 X, Y 및 개의 개체를 처리 할 수 ​​있지만 별도의 리포지토리는 기대하지 않습니다.

정식 DDD 정확성 이외에도 도메인 계층에서 이러한 관계가 어떻게 작동하는지 생각해 보는 것이 좋습니다. foreach 접근 방식은 setter를 사용하는 것을 의미하지만 컬렉션 추가는 유비쿼터스 언어로 표현할 수있는 방식으로 관계를 설정하는 비즈니스 객체를 의미합니다.

나는 당신의 후자의 방법보다 "올바른"생각,하지만 난 약간 변경합니다 :

repoA.Update(objectA); 
repoY.Delete(objectA.Id); 

foreach: 
    objectA.addX(objectX); 
    objectA.addY(objectY); 
    objectA.addZ(objectZ); 

    _unitOfWork.Commit(); 

는 유지하는 방법을 알고 있기 때문에 아이 엔티티는 일반적으로 집계 루트 자체에 노출되어 변경 운영 그것은 불변성이 필요합니다.

잘하면 도움이됩니다. 그러나 나는 당신의 모든 상황을 알지 못합니다. AXYZ()이 무엇을하는지 조금 더 이해하는 데 도움이됩니다.

+0

AXYZ() 메소드에는 비즈니스 트랜잭션 내에서 저장소 호출을 그룹화한다는 점을 제외하면 자체 논리가 없습니다. 나는 당신의 의견 대부분에 동의합니다. 그러나 하나의 문제/우려가 있습니다. DDD 접근법을 엄격하게 따르는 경우 objectA.DeleteY (ObjectY)가 있어야합니다. CollectionOfObjectY는 내 GenericRepository 의 FetchById 메소드를 통해 반입됩니다. 아래의 DeleteY 메소드는 addXXX 메소드처럼 foreach에서도 호출됩니다. 어떻게 생각해? – Elisabeth