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。那么这就是一个总和,对吗?
这不会改变实体的状态,使其不是真正的实体类吗?
还是就这样就可以了?
我主要关心的是,实体类是否可以包含方法,例如 getter 和 setter?尤其是像 AddField 这样的方法?
一个实体可以包含 getter、setter、adders、行为和业务规则(推荐)...基本上任何你想要的东西。
AddField 方法采用 IField 类型的对象。我将其存储在 Page 类内的字典中。那么这就是一个总和,对吗?
不,它可能是聚合根,但不一定。这取决于您的背景以及您如何设计聚合。请参阅http://dddcommunity.org/library/vernon_2011
这不会改变实体的状态,使其不是真正的实体类吗?
实体的本质就是改变状态,这就是为什么我们给它们 ID 来跟踪变化。另一方面,值对象可以设为不可变,因为它们的身份并不重要,大多数时候您不会修改值对象,而只是创建一个新的值对象。
如果您想走 DDD 路线,我建议您阅读蓝皮书或摘要,以对该方法有一个基本的理解。DDD 有其自己的原则和设计模式 - 当您不采用整个范式或至少不了解其背后的意图时,挑选其中的一些原则和设计模式并不总是有意义。