도메인 기반 디자인과 관련하여 약간의 독서를하고 있으며 집계 루트에서 순회하여 집계 내의 모든 엔티티에 액세스해야합니다.통과 집계
그러나 동시에 속성/필드가 보호되거나 개인이되도록 데이터를 캡슐화해야합니다.
내 질문은 : 필드가 보호 된 경우/개인 어떻게 트래킹을 집계해야합니까?
내가 지금 설정 한 방법은 다음과 같습니다. 내 도메인 모델의 모든 속성을 내부로 설정하고 보호 된 것으로 표시된 "설정"방법을 표시합니다. 이렇게하면 모델 외부의 모든 것이 속성에 액세스 할 수 있지만 모델 내의 객체는 다른 객체 속성에 액세스 할 수 있으며 객체 자체 내에서 속성을 설정할 수만 있습니다.
이 작업을 수행해도 다른 집계 엔티티 (즉, 고객의 "이름"은 여전히 비공개이지만 고객의 "주문"은 내부 -> 주문 -> 등)에서 트래버스 허용 내부
아무도 이것에 대한 지침이 있습니까?
편집 :
날 시도하고 질문에 대한 좀 더 구체적인 예를 들어 보겠습니다 : 을 내 객체 그래프에서 두 개체가 : 책장 및 책. 이 예제에서 Bookshelf는 집계 루트이고 Books는 책꽂이에 저장되므로 집계 내의 엔티티 만 (Bookshelf에는 책 모음이 있음)합시다.
책꽂이에 새 책을 추가하는 방법을 쓰고 싶습니다. DDD 모범 사례에 따라 AddBook (Book book)과 같은 Bookshelf 클래스에 메서드를 작성해야한다고 생각합니다.
그러나 동일한 제목의 책을 책꽂이에 추가 할 수 없다는 비즈니스 요구 사항이있는 경우에는 어떻게해야합니까? Bookshelf.AddBook 메서드 내에서 일부 논리를 사용하여 책 모음을 검사하여이 책이 존재하지 않는지 확인합니다.
이제 문제는 책 객체를 멋지게 캡슐화 된 방식으로 작성하고 "이름"속성에 공개적으로 액세스 할 수 없기 때문에 내가 할 수 없다는 것입니다.
나는 이것이 상당히 고안된 예제라는 것을 알고 있지만, 문제를 더 잘 보여주기를 바랍니다. 또한 이제는 이것이 DDD 문제가 아니라 OO 캡슐화 문제라는 사실을 깨닫게되었습니다. 내가하고 싶은 일을 해결하는 매우 일반적인 방법이 있어야하며 나는 그것을 극도로 지나치게 생각하고있다.
그것은 질문에 답해줍니다. 나는 그것이 내가 그것을 과소 평가했다는 것을 의미한다고 생각합니다. 단지 규칙을 약간 완화하고 속성을 사용할 수있게 만드는 것만 큼 쉽지만 집계 내에서만 가능합니다. 문제는 C# 언어 기능을 사용하여 책 이름에 대한 서가에 대한 액세스를 허용하지만 집계 외부에있는 클래스에 대한 액세스를 허용하지 않는 것입니다. (하나의 C# 어셈블리 내에있는 하나의 제한된 컨텍스트에 대한 서로 다른 집계로 생각하면됩니다) – Justin