Domain driven design 在域模型中实例化集合被认为是一种好的做法吗?

Domain driven design 在域模型中实例化集合被认为是一种好的做法吗?,domain-driven-design,Domain Driven Design,我看到这些类型的模型在网上有很多样本 public class User { public long Id { get; set; } public string Name{ get; set; } public virtual ICollection<Product> Products { get; set; } } 公共类用户 { 公共长Id{get;set;} 公共字符串名称{get;set;} 公共虚拟ICollection产品{get;set;}

我看到这些类型的模型在网上有很多样本

public class User
{
    public long Id { get; set; }
    public string Name{ get; set; }
    public virtual ICollection<Product> Products { get; set; }
}
公共类用户
{
公共长Id{get;set;}
公共字符串名称{get;set;}
公共虚拟ICollection产品{get;set;}
}
像下面的代码那样在构造函数中实例化集合是否被认为是一种好的做法?如果是,原因是什么?模型中的对象如何

public class User
{
    public User()
    {
        Products = new List<Product>();
    }
    public long Id { get; set; }
    public string Name{ get; set; }
    public virtual ICollection<Product> Products { get; set; }
}
公共类用户
{
公共用户()
{
产品=新列表();
}
公共长Id{get;set;}
公共字符串名称{get;set;}
公共虚拟ICollection产品{get;set;}
}

好吧,我想说这取决于具体情况,但在这种情况下,产品将通过存储库从数据库中填充,因此很可能是某种ORM,因此无需在构造函数中初始化新列表。产品为空表示列表尚未加载。另一方面,假设您的对象必须初始化此集合。对于简单的对象,DDD说构造器可以很好地处理这些事情,但是对于复杂的对象,请将构造移到工厂