2011-02-10 55 views
0

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

存储库是为外部网络服务的数据库。

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

回答

0

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

+0

嗯,对我来说服务代理意味着svcutil产生的一切。如果你需要额外的行为呢?大多数人创建包装,调用生成的代理类,但增加了验证,缓存和异常处理。 _(这是我正在寻找的术语)_ – 2011-02-14 07:52:15

0

我只是乞求围绕DDD的大部分原则,但我的理解是,存储库通常用于抽象数据库,但它们可用于包装任何表现为持久性和/或可查询存储的行为。所以简而言之,我想我的建议是,如果你的服务像数据库一样足够的行为,那么我就不会看到使用存储库来抽象访问它所涉及的实体的问题。否则,如果Web服务不直接处理您的域中的数据或行为,那么您的情况可能是应用程序层中基础架构级别服务的候选项。

如果有人有任何异议,请评论,因为我想知道我自己是否误解了存储库的使用目的。

1

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

如果数据的实际持久性是通过Web服务发生的,那么存储库的实现可能会与Web Service代理而不是数据库交互。然而,持久性涉及Web服务的事实并不能驱动你的域名应该如何表达。也就是说,数据是否通过直接的数据库调用持续存在,ORM,Web服务或者快递信鸽是实现细节。

现在,如果您的域模型依赖于外部服务(例如信用卡验证,地址验证等)来促进,则应该以接口的形式表示为域服务,该接口定义所需的操作根据域名模型。要清楚的是,域服务是逻辑上属于您的域的操作,但由于某种原因或某个给定实体或值对象上的另一个原因而不适合。外部服务促进的行为只是您可能使用域服务的一个示例,因此不要将域服务视为“Web服务的存储库模式”或其他类似的东西。