【发布时间】:2014-09-09 15:41:35
【问题描述】:
我正在努力深入了解 DDD,并阅读了 Eric Evans 关于领域驱动设计的书和 Julie Lerman 的博客,他们描述了:
Anemic Domain Model 作为具有专注于状态管理的类的模型。适合 CRUD。
Entity 作为一个可变类,具有用于跟踪和持久性的标识。
肯定两者都用于同一目的,还是我完全搞错了?两者有什么区别?我读过一个贫血的领域模型经常被用来表示一个数据库模式,但对于一个实体来说也不一样吗?
例如,一个名为 Customer 的 table 具有:
CustomerId int
Forename varchar(50)
Surname varchar(50)
IsActive bit
根据我的理解,anemic domain model 代表这看起来像:
public class Customer
{
public int CustomerId { get; set; }
public string Forename { get; set; }
public string Surname { get; set; }
}
对我来说,过去的经验表明,一个实体也可以通过一系列getter 和setter 属性以这种方式表示,这是一个实体框架吗?两个概念(实体和贫血域模型)都是mutable?
谢谢,DS。
【问题讨论】:
-
我想说他们来自两个不同的世界。最好比较贫血模型与富域模型或数据传输对象与实体/值对象/聚合根.
-
这里的问题再次是我们如何处理 DTO / 实体和值对象,因为值对象是不可变的,而实体和 DTO 不是。改变状态是可以接受的。
-
贫血域模型和 DTO 没有行为。丰富的域模型和实体/值对象/聚合根有它。没错,实体、值对象和聚合根是不同的,但它们通常都有行为。
-
如果您在域中使用 EF 实体,您将永远无法获得所需的域实体,这几乎是不可能的。例如,我对您的
Customer类所做的第一个修改是使CustomerId只读,甚至完全私有。
标签: entity domain-driven-design anemic-domain-model