2013-04-17 2 views
2

내 프로젝트에서 도메인 기반 디자인 패턴을 사용하고 있습니다. 모델 개체를 유지할 때 사용하는 다양한 데이터 매퍼가 있습니다. 내 모델 중 일부는 속성으로 다른 모델을 포함합니다 (예 : 모델 클래스 Book에는 모델 클래스 Person의 작성자가 포함됨).도메인 기반 디자인 패턴에서 서로를 호출하는 데이터 맵퍼

Book 
    |->string title 
    |->Person[] authors 

각 모델에는 대응하는 매퍼 (예 : Book_Mapper, Perspon_Mapper)가 있습니다. 모델 객체를 지속 할 때 하나 매퍼가 다른 매퍼에 전화를 걸 수 있도록

는 확인된다

책 객체를 지속 할 때

예를 들면, 나는

Person::Mapper(Person) 
를 호출

Book_Mapper::Save(Book) 

전화 책의 각 저자에 대한

?

답변

4

DDD의 관점에서 data mappers에 관한 질문을 처리하려면 먼저 모델을 약간 추출하고 aggregates 엔티티 및 값 개체를 결정하는 것이 중요합니다.

Book이 집계이고 Person이 값 개체라고 가정합니다. 이 경우 Book 집합의 일부로 항상 유지되기 때문에 Person에 대한 별도의 매퍼를 만들 필요가 없으므로 책의 매퍼는 사람 매핑도 처리해야합니다. 사실, 사람을위한 별도의 매퍼를 만드는 것은 혼란 스러울 수 있습니다.

그러나 Person도 집합체 인 경우 Book에 ID만으로 참조하는 것이 가장 좋습니다. 이 경우, 책을 지속 할 때 사람 맵퍼를 호출 할 필요가 없습니다.

+1

여기에 eulerfx에 추가 할 내용 : 'Person'이 집합체 인 경우 실제로는'Book' 집계에 저자 목록을 포함하는 'Author' 값 객체 뒤에있을 수 있습니다. 일반적으로 사람 ID 목록이면 충분하지만 VO에 대한 추가 정보가 필요하거나 경량 CQRS/Query/Reporting/Read Model 항목의 작성자 이름과 같은 일부 데이터를 비정규화할 수도 있습니다. –

+0

좋아요, 그렇다면 내가 여러 책의 저자가 될 수있는 사람을 가질 수있는 방법은 단순히 책의 속성에 그 사람의 ID를 저장하고 새 책이있을 때 책 및 매킨토시를 호출하는 것입니다 지속될 거지, 그렇지? – silentser

+0

@ silenter : 새 책을 보관할 때 ID를 저장하기 때문에 사람 매퍼를 호출 할 필요가 없습니다. 그러나 쿼리 할 때 전용 [read-model] (http://gorodinski.com/blog/2012/04/25/read-models-as-a-tactical-pattern-in-domain-driven- design-ddd /)를 사용하여 필요한 모든 데이터에 참여하십시오. – eulerfx

관련 문제