3

데이터베이스의 데이터 표현이 아닌 엔티티에 대한 질문이 있지만 비즈니스 용도로 필요한 사용자 지정 엔터티에 대한 질문이 있습니다.DDD 및 Entity Framework의 집계

내 솔루션은으로 구성되어

: 조립

  • 엔티티 (POCO 개체)
  • 저장소 조립 (EF 코드 순으로)
  • 비즈니스 계층 어셈블리
  • UI 총회 (MVC)

내 엔티티 어셈블리에는 두 개의 엔티티, AB이 있으며 특정 p

class X 
{ 
    public A[]; 
    public B[]; 
} 

나는 저장소에서 직접 객체를 반환해야 내 비즈니스 로직의 urpose, 나는 (다른 속성들) 모두를 포함하는 개체를 반환해야합니까? 또는 비즈니스 레이어에서 repo.GetArepo.GetB을 호출 한 다음 X을 생성하고 반환해야합니까?

이 경우 비즈니스 계층에 개체를 만드는 것이 좋습니다. 그러나 X 클래스가 AB의 "그룹 기준"일 경우 어떻게해야합니까? 저장소에서 반환하는 것이 더 합리적입니다.

은색 총알이 없지만 어떤 지침이 있습니까?

건배.

+0

진정한 DDD를 따르기 위해서는 엔티티 및 저장소 인터페이스가 모두 비즈니스 (도메인) 계층에 있어야한다고 생각합니다. –

답변

4

난 당신이 X가 속한 계층과 정말 무엇인지 알아낼 필요가 있다고 생각 :

  • 도메인 엔티티, 즉 그것은 유비쿼터스 언어에서 도메인 개념을 전달한다. 이 경우 X은 아마도 AB 하위 엔터티 목록을 포함하는 집계 루트 일 것입니다. 또한 데이터 외에도 메소드가있을 수 있습니다. X의 저장소는 X 개체와 함께 A 및 B 모음을 유지하며 A 또는 B에 대한 저장소가 없습니다.

  • UI 특정 또는 유스 케이스 별 데이터 구조. 도메인 계층은 X과 아무 관련이 없습니다. 응용 프로그램 또는 UI 레이어는 AB 인스턴스와 X 개체 간의 매핑을 처리합니다.

+0

그리고 UI에 특정한 것이지만 저장소에서 그것을 생성하는 것은 매우 비쌉니다. 예 : 여러 테이블의 조인/그룹화의 엔터티 결과 – vtortola

+0

일반 리포지토리 외에 특수 "분석"리포지토리를 가질 수 있습니다.비슷한 문제가 여기에 설명되어 있습니다 : http://stackoverflow.com/questions/2098112/ddd-how-to-implement-high-performing-repositories-for-searching, http://stackoverflow.com/questions/2558469/ddd- 골재 뿌리 – guillaume31

2

저의 이해는 저장소가 항상 비즈니스 유형의 객체를 다루어야한다는 것입니다. 이 경우 X 유형의 오브젝트를 리턴하는 저장소와 동일합니다. X가 작성되는 방식은 저장소의 비즈니스입니다. 이것은 2 명의 데이터 맵퍼가 A와 B를 얻고 결과 또는 다른 적절한 프로세스를 병합하는 것일 수 있습니다.