【发布时间】:2013-08-08 08:46:15
【问题描述】:
首先,我想澄清一下,我是域驱动设计的新手,我之所以提出这个问题,是因为我读过一个叫做贫血域模型的东西。
大多数时候我在使用存储库模式时会看到以下内容。
- 我们有一个通用存储库
- 我们的模型仅包含一组公共属性,但不包含任何方法(因此根据 DDD 的定义,它成为贫血域模型),因为这里存储库类处理该实体或模型的其他进程。
请为我的查询提供您宝贵的答案。
让我澄清几件事。
Generic Repository 是指由实体存储库实现的通用接口。
我的困惑是关于以下事情
例如: 假设我想保存
public class User
{
public int Id { get; set;}
public string Name { get; set};
}
public class UserRepository : IRepository<User>
{
// All Operation Like Save / Get / UserEntity (Domain Object)
}
所以这里是我的 User 类什么都不做,它只有属性和其他操作句柄 UserRespository。所以我的用户是贫血域模型。 (因为它没有做任何具体的事情)
在附图中我考虑ProductRepository 所以我的问题是:我的产品类是贫血模型吗?
请考虑按照我想说的示例图片。
【问题讨论】:
-
您能详细说明一下吗?是什么让你认为 Repository 会是一个反模式?有人的意见?你自己?如果您期望得到有价值的答案,请在问题中添加一些价值:)
-
Repository 是反模式不是我自己的,但我混淆了贫血域模型定义和存储库模式的方式。像存储库模式一样负责保存实体,但实体本身没有任何保存方法。
-
这在 DDD 中完全有效,将存储库视为服务。
-
这里是 DDD\CQRS 邮件列表上有关此问题的主题:groups.google.com/d/msg/dddcqrs/krOf_dqnD8o/qpTc0OPQSMQJ
-
“我们有一个通用存储库”是什么意思。每个聚合都应该有特定的存储库,而不是通用的。