0

마스터라는 루트 엔터티와 Detail이라는 리프로 구성된 집계가 있습니다. 따라서 마스터 엔터티에는 Detail 엔터티 컬렉션이 있습니다. 클라이언트가 Detail 항목을 직접 추가하고 싶지 않기 때문에 Details 컬렉션을 클라이언트에 노출시키지 않습니다. 대신, 나는 새로운 디테일 아이템이 추가되는 즉시 도메인 인디 언트를 검증하는 마스터 엔티티에 AddDetail 메소드를 가지고 있으며, 그 곳에서 도메인 규칙을 적용 할 수 있습니다. 세부 사항은 읽기 전용 IEnumerable 속성으로 공개됩니다. MasterRepository에서 Details 항목을로드하려고 할 때 문제가 발생합니다. Details 컬렉션에 항목을 추가 할 수 없으므로 마스터 엔터티의 상태에 속하는 세부 정보를로드하는 방법을 알지 못합니다. 반면에 마스터 엔티티의 상태를로드하는 동안 AddDetail 메서드를 사용하는 것은 좋은 습관이라고 생각하지 않습니다. 그 이유는 룰이 이미 적용 되었기 때문이며 엔티티의 상태를로드하는 동안이를 확인하는 중복 된 오버로드가 될 것이기 때문입니다 . 또한 새로운 세부 정보를 추가하면 엔티티를로드하는 동안 발생하지 않으려는 일부 도메인 이벤트가 트리거됩니다.DDD에서 도메인 엔터티의 자식 컬렉션로드

답변

2

가 나는 마스터 엔티티의 상태

를로드하는 동안 당신은 바로 AddDetail 방법의 사용되는 AddDetail 방법을 사용하는 것이 좋습니다 좋은 생각이 아니다 생각하지 않습니다.

마스터 엔티티 상태의 일부인 세부 정보를로드하는 방법을 모르겠습니다.

Master 엔티티의 다른 속성을 어떻게로드합니까?

  1. 으로 ORMs 민간 분야 (예를 들어 NHibernate에, EntityFramework)를 매핑 할 수 있습니다 :

    가능한 옵션이 많이 나는 또 다른 질문 (How to retrieve Domain Object from Repositories)를 응답 언급이 있습니다.

  2. 개인 필드에 액세스 할 때 반사를 사용할 수 있습니다.
  3. 컬렉션은 엔티티를 구성하는 데 사용되는 공용 생성자를 통해 전달 될 수 있습니다. 컬렉션에 공개 설정자를 사용하지 않는 것이 좋습니다. Detail 개체의 집합이 Master의 속성은 내가 다른 속성을로드하기 위해 사용되는 방법을 사용하는 것이 간단하기 때문에
  4. 3 번째 부분 프레임 워크는 때때로 (예를 들어, AutoMapper)

유용 할 수 있습니다.

1

사용중인 언어를 말하지 않았지만 ORM 프레임 워크는 대개 리플렉션을 통해 마스터의 내부 필드에 직접 액세스합니다.

반영하지 않고 언어를 사용하는 경우 필드에 대한 패키지/친구 액세스 권한이있는 내부 유틸리티 클래스 (예 : 동일한 패키지에 있음)를 추가 할 수 있으며 리포지토리에서 액세스 할 수 있습니다 필드를 직접.

+0

답변 해 주셔서 감사합니다. 내 문제는 일반적인 디자인 문제로 간주하고 언어 별 해결 방법을 찾기 싫어서 언어를 언급하지 않았습니다. – Daniel

관련 문제