加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 资源网站 > 资源 > 正文

entity-framework – 在域驱动设计中为模型属性设置默认值的最佳

发布时间:2020-12-14 18:40:02 所属栏目:资源 来源:网络整理
导读:在DDD中为新实体设置默认属性的最佳方法是什么?另外,为复杂属性(例如集合)设置默认状态的最佳方法是什么? 我的感觉是默认值应该在模型中,因为它们是业务规则的一种形式(“默认情况下,我们希望X是Y Z”),域代表业务.使用这种方法,模型本身的静态“GetNew()
在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
    }
}

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

解决方法

这是 factory pattern in DDD的一个实例.它可以是专用类,如PersonFactory,也可以是静态方法,如示例所示.我更喜欢静态方法,因为我认为不需要创建一个全新的类.

至于初始化集合,我将使用集合作为参数的GetNew方法.它陈述了一个重要的约束 – 创建一个你需要该集合的新人实体.集合实例将由托管特定用例的应用程序服务提供.更一般地,默认值可以存储在数据库中,在这种情况下,应用程序服务将调用存储库以获取所需的值.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读