在域驱动设计中为模型属性设置默认值的最佳实践?

Bre*_*ill 7 domain-driven-design entity-framework default models

在DDD中为新实体设置默认属性的最佳方法是什么?另外,为复杂属性(例如集合)设置默认状态的最佳方法是什么?

我的感觉是默认值应该在模型本身,因为它们是业务规则的一种形式("默认情况下,我们希望X是Y&Z"),域代表业务.使用这种方法,可能模型本身的静态"GetNew()"方法可以工作:

public class Person {
    public string Name { get; set; }
    public DateTime DateOfBirth { get; set; }
    public bool IsAlive { get; set; }
    public List Limbs { get; set; }

    public static Person GetNew() {
        return new Person() { 
            IsAlive = true,
            Limbs = new List() { RightArm, LeftArm, RightLeg, LeftLeg }
        }
    }
}

不幸的是,在我们的例子中,我们需要将collection属性设置为另一个列表的所有成员,并且由于此模型与其Repository/DbContext分离,因此它没有任何方法可以将它们全部加载.

Crappy解决方案将作为参数传递:

public static Person GetNew(List<Limb> allLimbs) {
    return new Person() { 
        IsAlive = true,
        Limbs = allLimbs
    }
}
Run Code Online (Sandbox Code Playgroud)

或者,是否有一些更好的方法来设置简单和复杂模型属性的默认值?

Rob*_*Rob 0

查看 Joshua Bloch 的《Effective Java》(第二版)中的静态构建器。在那里,你有一个静态构建器类,并且在构造之前链接调用来设置属性,因此它解决了要么拥有一个需要大量参数的构造函数,要么必须在每个属性上放置 setter 的问题(在这种情况下,你实际上有一个结构)。