DDD中的存储库或ServiceAgent

时间:2011-02-10 15:25:20

标签: domain-driven-design ddd-repositories dddd

我有一个使用存储库与数据库通信的系统。什么是远程服务时的正确定义?或者更好,

存储库用于数据库,[...]用于外部Web服务。

我在许多地方发现了ServiceAgent,但我不知道这是不是正确的定义。

3 个答案:

答案 0 :(得分:1)

在DDD中,存储库代表实体的虚拟集合(特别是聚合根)。因此,如果您有10M持久客户,您将使用存储库,就像它是内存中所有10M的集合一样。存储库通常只处理您在集合中找到的相同类型的操作:添加内容,删除内容,在集合中查找内容。

如果数据的实际持久性通过Web Service发生,则存储库的实现可能与Web Service代理交互,而不是与数据库交互。持久性涉及Web服务这一事实并不会推动您的域应如何表达。也就是说,数据是通过直接数据库调用,ORM,Web服务还是快递鸽持久化的,是一个实现细节。

现在,如果您的域模型具有外部服务促进的依赖关系(例如信用卡验证,地址验证等),则应将其表示为定义所需操作的接口形式的域服务< b>就领域模型而言。要明确的是,域服务是逻辑上属于您的域的操作,但由于某种原因而无法在给定实体或值对象上完全适合。外部服务促成的行为只是您使用域服务时的一个示例,因此不要将域服务视为“Web服务的存储库模式”或某些此类事物。

答案 1 :(得分:0)

不确定这是否是官方用语,但我将其称为“服务代理”。

答案 2 :(得分:0)

我只是乞求围绕大多数DDD原则,但我的理解是,存储库通常用于抽象数据库,但它们可以用来包装任何行为持久和/或可查询存储的东西。所以简而言之,我想我的建议是,如果你的服务行为像数据库一样,那么我没有看到使用存储库抽象访问它所处理的实体的任何问题。

否则,如果Web服务不直接处理域中的数据或行为,那么您的案例可能是应用程序层中基础结构级服务的候选者。

如果有人有任何异议,请发表评论,我想知道我是否误解了存储库的预期用途。