2017-01-11 5 views
1

C#을 사용하여 이벤트 소싱을 통해 CQRS를 배우고 작성하기 시작했습니다. 많은 샘플을 검사하고 각 샘플에서 도메인 객체를 생성하는 동안 모든 필수 도메인 필드는 생성자를 사용하여 전달되거나 정적 메소드를 통해 전달되어 도메인 객체를 만듭니다.C# DDD - 도메인 개체 생성

전체 DTO를 도메인 객체로 전달하여 최상위 레이어에서 가져 오는 개별 필드의 긴 목록을 전달하지 않고 구성해야합니까?

public class Student : AggregateRoot 
{ 
    public int ID { get; set; } 
    public string Name { get; set; } 

    // Without ID and Name a domain object should not be created 

    //Can I write like this?   
    public Student(StudentDto studentDto) 
    { 
     ID = studentDto.ID; 
     Name = studentDto.Name; 
    } 

    //Can I write like this? 
    public Student(int id,string name) 
    { 
     ID = id; 
     Name = name; 
    } 
} 
+0

무엇이'AggregateRoot'와'StudentDto'입니까? –

+2

도메인 메모는 DTO에 대한 지식이 없어야합니다. –

+0

AgfregateRoot는 모든 내 집계에 대한 기본 클래스이며 StudentDto는 내 서비스 레이어에서 다른 레이어로 pasa 데이터에 이르는 클래스입니다. doman 모델은 dtos에 대한 지식이 없어야하며 내 질문을 해결합니다. 개별 필드를 전달해야합니다. 완전한 dto 대신 .correct 만약 내가 잘못하면 제발. – Deb

답변

4

여기서 DTO는 잘못된 것입니다. DTO와 도메인 객체 사이에 바람직하지 않은 연결 고리가 생겨나 고 있으며 서로 다르게 진화합니다. 도메인 객체가 더 많은 인수를 취하도록 진화하거나 DTO가 더 많은 속성을 필요로한다고 상상할 수 있습니다.

일반적으로 생성자에 명시 적 필드 도메인 개체 필요를 전달해야합니다. 결국 생성자 인수 목록이 길어지면 도메인 객체가 너무 많은 자원을 갖고 있거나 Builder 패턴을 사용하여 필요한 명시 적 인수의 수를 줄일 수 있습니다.

+0

고맙습니다 .. 아이디어를 얻었습니다 – Deb

+0

여전히 상당한 중복이 예상됩니다. 자동 매퍼가 종종 상용구를 완화하기 위해 도입됩니다. –