我已经开始使用C#通过事件源学习和创建CQRS。我检查了很多示例,并在每个示例中,在构造域对象时,所有必需的域字段都使用构造函数或通过静态方法传递来创建域对象。

我是否应该将完整的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;
    }
}

最佳答案

DTO在这里使用是错误的事情。您正在引入DTO和域对象之间的不良链接,并且它们的发展方式有所不同。您可以想象域对象可能演变为采用更多参数,或者DTO将需要更多属性。

通常,应在其构造函数中传递域对象需要的显式字段。如果最终的构造函数参数列表很长,那么域对象可能具有太多的责任感,或者可以使用Builder模式减少所需的显式参数数量。

10-01 13:41