2012-06-25 6 views
0

나는 이와 같은 백만 가지 질문이 있음을 알고 있습니다. 죄송 해요. 나는 내 생각이 다르다고 생각하지만 그렇지 않을 수도 있습니다. 나는 DDD를 처음 사용하고 그립을 얻으려고 노력하고 있습니다. 내 도메인의 일부가 이와 같습니다. 위치 1 *이 필드를 필드를 1 * 이벤트 필드 1 * 작업 작업 - 직원집합 루트 디자인 및 크기

지금은 AR의 위치입니다 것으로 보인다. 특정 작업을 원한다면 작업 컬렉션으로 필드 컬렉션을 통해 작업을 탐색해야합니다.

저는 작업과 이벤트를 많이 다루고 있고 말할 필요가없는 곳이 거의 없으므로 상당히 힘들어 보입니다. 위치는 일련의 필드와 해당 엔티티를 분리하는 역할을합니다. 그래서 우리는 위치를 선택하고 필드 목록을 얻을 수 있습니다. 나는 그때 들판을 골랐다. 거기에서 나는 그 중 하나를 편집 할 수 있습니다. 그래서 나는 일련의 일들을 가지고 있으며 나는 그 일의 이드를 가질 수 있도록 하나를 고른다. 그런 다음 위치로 이동하여 자신의 ID를 얻고 AR을 가져 와서 작업으로 되돌아 가야합니다. 또는 오히려 나는 그것을 얻을 수있을 정도로 AR의 이드를 계속 지킬 것이다. 나는 필드의 이드를 계속 지켜야 하는가? 그래서 내가 서버로 돌아간 것은 AR.Id, Field.Id와 Tasks 일 것입니다. 내가보고 싶은 것이 있다면?

두 번째로 직원은 당연히 AR이 될 가능성이있는 엔티티가 될 수 없습니다. AR에있는 엔티티가 AR 모음을 가지고 있어도 괜찮습니까?

그래서 구조화해야 할 방법은 다음과 같습니다. 이 훨씬 쉽게 가장과의 관계를 탐색하기 위해 수정 된 개체를 처리 할 수 ​​있습니다,하지만 그것도 옛날부터 OOP 같은 종류의 느낌과 그 AR은 정말 아무것도 의미하지 않는다

public class Location // is an aggregate Root 
{ 
    public IEnumerable<Field> Fields {get;set;} //in real code encapsulated. not here for brevity 
} 
public class Field // is an Aggregate Root 
{ 
    public Location Location {get;set;} //reference to AR 
    public IEnumerable<Task> Tasks {get;set;} 
    public IEnumerable<Events> Events {get;set;} 
} 
public class Task // is an Aggregate Root 
{ 
    public Field Field {get;set;} // reference to AR 
    public IEnumerable<Employee> Employees {get;set;} 
    public TaskType TaskType {get;set;} // probably Value Object 
    public IEnumerable<Equipment> Equipment {get;set;} // maybe Entity or AR 
} 

.

다시 한번 DDD를 처음 접했고 온 전성 검사를 위해이 프로그램을 실행할 사람이 없습니다. 이 경계선이 그려지는 방법을 파악하는 데 도움을주십시오. 첫 번째 방법 인 경우 엔티티를 처리하고 AR.id, ParentParent.Id, ParentId 및 마지막으로 객체를 처리하는 쉬운 방법이 있습니까? 관심은 내가 기사의이 위대한 시리즈를 발견 인터넷 검색을 좀 더시

+1

이것은 모두 매우 구조적입니다. 집계는 트랜잭션 일관성 경계이며 트래버스하는 구조적 그래프가 아닙니다. –

답변

1

확인 어떤 생각 R에 대한

감사 Entity.Id.

http://dddcommunity.org/sites/default/files/pdf_articles/Vernon_2011_1.pdf

2 부에 도착 등 단지 URL의 마지막 didgit을 변경합니다.

나는 Yves가 지적한 것처럼 Aggregates와 Aggregate Roots의 목적을 오해하고 있었다. 서로 관계가있는 수많은 엔티티를 번들링하는 것이 아니라 관련 엔티티 간의 일관성을 유지하는 것이 중요하다는 것을 알 수 있습니다.

필드가 주어진 날에 3 개의 작업 만 가질 수 있다면, 필드는 작업에 쓸모없는 항목을 추가하는 경우 시스템에서 잘못된 상태를 쉽게 만들 수 있기 때문에 필드는 AR을위한 좋은 후보가됩니다. 마치 Field에 메소드를 통해 Task를 추가해야만하는 것처럼, 그것이 수용 가능한지 쉽게 확인할 수 있습니다.

거대한 집계 루트는로드하는 데 많은 리소스가 필요하며 동시성 문제를 일으킬 수 있기 때문에 거대한 집계를 피하고자합니다.기타 등 위의 질문을 아름답게 다루는 기사를 읽으십시오

+0

나는이 기사 시리즈를 제안하려고했다. DDD를 시작하는 사람은 누구나 청첩장 위에이 글을 읽어야합니다! 추신 당신은 당신의 질문이 언급 된 경우 이것을 받아 들인 대답으로 표시해야합니다 :) –