2010-06-03 6 views
3

DDD에서 저장소는 도메인 개체의 저장 및 검색을 처리하고 집계 된 루트의 컬렉션으로도 사용됩니다. 내 질문에 어떻게 그 하위 엔티티에 대한 정보를 검색합니까 (DB에서 말하죠) 기본 규칙은 저장소가 Aggregate Roots (부모 개체) 컬렉션을 보유하고 자식 개체는 포함하지 않아야하는 Aggregate를 어떻게 수집합니까? 예를 들어집계 개체를 검색하는 방법은 무엇입니까?

:

사용자 (부모 ​​개체) 주문 (자식 개체)

사용자 도메인 객체는 사용자 테이블에 저장되며 주문은 다른 테이블에 저장됩니다. 기본적으로

, 도메인 개체를 검색하면 다음과 같이 될 수있다 :

<?php 
$userRepos = new UserRepository(); 
$user = $userRepos->find($userId); 
?> 

어떻게하면 자식 개체 (주문) 사용자 개체의 사용자 집합의 일부로로 검색 할 수?

+0

당신은 리포지토리가있는 DB에서 간단한 집계를 만들 수 있습니까? – Jebb

답변

2

리포지토리가 집계 루트에 대한 참조 만 보유하더라도 집계 루트는 자식 개체 (값 개체)에 대한 참조를 보유합니다. 따라서 Aggregate 객체를 생성하는 팩토리는 Aggregate Roots와 Value 객체간에 이러한 "내부"참조를 작성한 다음 Aggregate Root 만 저장소에 배치해야합니다. 그런 다음 저장소에서 Aggregate Root를 가져온 후에 (간단한 getter API를 통해) 이러한 자식 객체를 가져 오는 것만 큼 간단합니다.

+1

저장소는 도메인을 지속성과 분리하거나 분리해야합니다. 저장소 또는 저장소 (예 : UserRepository)를 통해 단일 도메인 개체 (예 : 사용자)를 검색하는 것은 의미가 있습니다. 단 하나의 도메인 개체 대신 집계를 검색하는 경우에 문제가됩니다. 집계를 구성하는 하위 개체를 어떻게 검색합니까? 저장소를 통해서도? 그러나 리포지토리는 Aggregate Roots에만 제공되고 Aggregate의 Children Objects에는 제공되지 않습니다. – Jebb

+0

예 집계는 repo 형 도메인 객체에 저장됩니다. 비록 집계의 경우 자식 객체에 대한 내부 참조가 있습니다. 결코 집계 자식을 직접 repo에서 검색해서는 안됩니다. 예를 들어 사용자 집계 객체가 있습니다 주문 목록을 하위 항목 (사용자와 관련된 주문)과 함께 사용합니다. 이렇게하려면 먼저 repo에서 사용자 객체를 검색해야합니다. 그러면 사용자 객체 자체에 getter 메소드를 사용하여 orders 자식 객체를 가져올 수 있습니다 (루트가 자식에 대한 액세스를 제공하는 유일한 객체이므로) –

+1

감사합니다. Eric. 예, 동의합니다. 집계/하위 상호 작용 하위 개체 (주문)를 집계 루트 (사용자)를 통해 수행해야합니다. 내 질문의 컨텍스트가 ORM (Doctrine 2) 저장소에 구현됩니다. – Jebb

관련 문제