所有“批量”操作在 DDD 中属于哪里?

问题描述 投票:0回答:4

在 DDD 中,关键概念之一是存储库,它允许您检索实体(或聚合根),然后在更新后将它们保存回来。

假设我们需要对实体执行一些“批量”操作,并且实体的数量使得将它们检索到内存中是绝对不可能的。 IE。操作只能在数据库中进行。

这样“批量”操作的地方在哪里?它应该是存储库上的方法吗?它不会“泄漏”数据库特定操作的存储库抽象吗?不会把业务操作从实体转移到存储库吗?

domain-driven-design abstraction ddd-repositories
4个回答
9
投票

我认为这应该是一种服务。

Evans 在他的书中建议,当你怀疑是否要把一个“闻起来很糟糕”的方法放在一个类中,因为你认为它不属于那里时,创建一个包含该操作的 ServiceFoo 类。


6
投票

您需要的在领域驱动设计中称为“服务”。服务用于对过程任务进行建模。批量更新操作(如您所描述的那样)将是服务的理想候选者。


4
投票
我认为将批量任务作为方法放入存储库中没有任何问题。他们不会泄漏任何东西。进行批量操作并不意味着任何特定于数据库的操作,除非您的方法类似于 ReBuildMSSQLIndexesOnMyBigTable()。 


2
投票

如果您使用 ORM,那么您的存储库将不依赖于数据库。他们会将所有请求转发到 ORM 层。

如果您正在编写自己的映射器,那么存储库会将请求转发给实体的映射器。我认为这种耦合还可以。

© www.soinside.com 2019 - 2024. All rights reserved.