(DDD) 实体类可以包含哪些方法?

Viv*_*ndi 1 c# entity domain-driven-design

我有一个类,它应该充当实体类(如 DDD 中)。它基本上看起来像这样:

public class Page
{
    protected String Name;
    protected String Description;
    protected Dictionary<int, IField> Fields = new Dictionary<int, IField>();

    protected Page SetName(String name)
    {
        this.Name = name;
        return this;
    }

    protected Page SetDescription(String description)
    {
        this.Description = description;
        return this;
    }

    public Page AddField(IField field)
    {
        this.Fields.add(xxx, Field); //xxx = just some id
        return this;
    }
}
Run Code Online (Sandbox Code Playgroud)

现在我的问题是,这是一个有效的实体类吗?

我需要保持方法链接,所以请不要对此进行太多详细说明(即使您认为这是错误的)。

我主要关心的是,实体类是否可以包含方法,例如 getter 和 setter?尤其是像AddField?这样的方法

AddField方法采用 类型的对象IField。我将其存储在班级内的字典中Page。那么这就是一个总和,对吗?

这不会改变实体的状态,使其不是真正的实体类吗?

还是就这样就可以了?

gui*_*e31 5

我主要关心的是,实体类是否可以包含方法,例如 getter 和 setter?尤其是像 AddField 这样的方法?

一个实体可以包含 getter、setter、adders、行为和业务规则(推荐)...基本上任何你想要的东西。

AddField 方法采用 IField 类型的对象。我将其存储在 Page 类内的字典中。那么这就是一个总和,对吗?

不,它可能是聚合,但不一定。这取决于您的背景以及您如何设计聚合。请参阅http://dddcommunity.org/library/vernon_2011

这不会改变实体的状态,使其不是真正的实体类吗?

实体的本质就是改变状态,这就是为什么我们给它们 ID 来跟踪变化。另一方面,值对象可以设为不可变,因为它们的身份并不重要,大多数时候您不会修改值对象,而只是创建一个新的值对象。

如果您想走 DDD 路线,我建议您阅读蓝皮书摘要以对该方法有一个基本的理解。DDD 有其自己的原则和设计模式 - 当您不采用整个范式或至少不了解其背后的意图时,挑选其中的一些原则和设计模式并不总是有意义。