Class 基类“;“实体”;及;ValueObject“;领域内驱动设计

Class 基类“;“实体”;及;ValueObject“;领域内驱动设计,class,domain-driven-design,base,Class,Domain Driven Design,Base,您总是创建这两个抽象基类作为DDD中任何新项目的基础吗 我读过,实体应该有两件事。首先,标识属性,可能是泛型类型。其次,是一个Equals()方法,用于确定它是否与另一个实体相同。还有别的吗?还有其他自然方法或经验法则吗?到目前为止,我的应用程序中从未需要Equals()方法。不过,您的里程数可能会有所不同 但是,我创建了空接口并将其用作描述符: public interface IAggregateRoot {} public interface IEntity {} public inter

您总是创建这两个抽象基类作为DDD中任何新项目的基础吗


我读过,实体应该有两件事。首先,标识属性,可能是泛型类型。其次,是一个Equals()方法,用于确定它是否与另一个实体相同。还有别的吗?还有其他自然方法或经验法则吗?

到目前为止,我的应用程序中从未需要Equals()方法。不过,您的里程数可能会有所不同

但是,我创建了空接口并将其用作描述符:

public interface IAggregateRoot {}
public interface IEntity {}
public interface IValueObject {}

public class Order : IAggregateRoot
{
  ...
}

public class State : IValueObject
{
  ...
}
如果您使用的是.NET/C#,我已经发布了一组供公共使用的DDD接口和类。看一看,看看它们里面通常有什么。嵌入的代码注释应该提示它们的用法


你可以[在这里下载][1]。项目现在已经死了。

我希望我的所有域对象都有一个共同的抽象祖先,但这是一个偏好和总体基础架构需求的问题

之后,我有实体和值对象的抽象类

不要忘记,重写Equals for Value对象以返回基于equal属性状态的equality也很重要


此外,人们经常忽视包裹的价值。将所有这些核心基类放在它们自己的“内核”库中,不要不情愿地将域模型拆分为多个程序集,而不是使用单个大型“域库”。

死链接。你有备用的吗?谢谢。空接口不是一种好的设计技术。在C#自定义属性和Java自定义注释中,可能是更好的方法,具体取决于问题