C#DDD - 域对象创建

时间:2017-01-11 03:13:29

标签: c# oop domain-driven-design cqrs

我已经开始使用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;
    }
}

2 个答案:

答案 0 :(得分:4)

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

通常,您应该在其构造函数中传递显式字段域对象需求。如果最终得到一长串构造函数参数,则域对象可能具有太多的可复制性,或者您可以使用Builder模式来减少所需的显式参数数。

答案 1 :(得分:0)

我认为这是解决DDD持久性问题的一种方法。

https://vaughnvernon.co/?p=879,V。Vernon做同样的事情。