9

저는 지난 2 주 동안 DDD를 공부 해왔고 실제로 집계 된 뿌리가 다른 집계를 포함 할 수있는 방법 중 하나였습니다. 집계 루트는 저장소에서 검색되지만 루트에 다른 루트가 포함되어있는 경우 저장소에 다른 저장소에 대한 참조가 있고 하위 루트를 작성하도록 요청합니까?DDD : 다른 집계에 대한 집계 루트를 얻는 것

+0

도메인 기반 디자인입니까? 복합 디자인 패턴을 보셨습니까? – philant

답변

0

내 의견에 따르면 - 나는 동일한 시나리오를 가지고 있으며 이것들을 다루는 방식은 내가 사용하고있는 ORM을 통한 것입니다 - nHibernate.

여러 엔티티가 집계되는 모든 엔티티에 대한 매핑이 있으며 그 중 하나에는 멤버 변수로 다른 여러 집계가 있습니다. nHibernate는 (매핑을 통해) 필요한 모든 데이터를 얻는 방법을 알고 있기 때문에이 종합 집계 루트의 저장소에는 다른 집계 루트 저장소에 대한 참조가 필요하지 않습니다.

HTH

AWC

1

저장소 구축하지만 저장하지 않습니다. ddd를 사용할 때는 작업 단위, ID 맵, 지연로드, 오브젝트 관계 맵퍼, 조회 오브젝트 (동적) 프록시와 같은 기본 지속성 패턴에 익숙해지기를 원할 수 있습니다. (이 패턴은 ddd와는 아무런 관련이 없지만 알기에는 매우 유용합니다). 저장소는 앞에서 언급 한 패턴의 구현을 숨기고 도메인 중심의 방식으로 추상화 된 데이터 액세스를 숨기는 외관 일뿐입니다. 대부분의 사람들은 요즘 수동으로 퍼시스턴스 인프라 스트럭처를 수동으로 작성하지 않습니다. 특히 ddd를 사용할 때, orm을보고 싶을 수도 있습니다.

데이터베이스 레코드를 개체로 변환하는 코드의 실제 참조는 datamapper에 있습니다. 매핑 클래스 자체의 매핑 클래스 간에는 참조가 있거나, 매퍼 팩트와 같은 것으로 만들어집니다.

public interface IDataMapper<T> 
{ 
    T Map(IDataReader reader); 
} 

당신은 당신을 위해 그것을 수행하는 도구를 사용하여 도구의 코드 부분 (ORM)가 어떻게 작동하는지 이해하려고,이 코드를 직접 구현할 필요가 없습니다. 어떤 orm도없는 순수한 ddd는 많은 코드를 작성하지 못하게하는 훌륭한 도구가 없으면 거의 불가능합니다.

2

@Paco : 틀렸어. 저장소는 객체를 저장하기위한 것이 아닙니다. 에릭 에반 (Eric Evan)의 DDD 서적을 읽었다면 리포지토리가 객체 지향 메모리 내 데이터 표현과 같은 것임을 알 수 있습니다. 콜렉션을 사용할 때와 같은 방법으로 리포지토리 객체를 사용할 수 있습니다. 인덱서를 사용하여 개체를 가져 오거나 설정할 수 있으며 Add() 메서드를 사용하여 새 개체를 추가하거나 Remove() 메서드를 사용하여 개체를 제거 할 수 있습니다.

리포지토리는 다음을 위해 인프라를 사용합니다. 데이터베이스와의 데이터 읽기/쓰기. 관계형 데이터베이스의 데이터 검색과 엔티티 매핑을 단순화하기 위해 DataMapper를 사용할 수 있습니다.

관련 문제