Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Domain driven design “大家都在哪里?”;散装;业务属于DDD?_Domain Driven Design_Abstraction_Ddd Repositories - Fatal编程技术网

Domain driven design “大家都在哪里?”;散装;业务属于DDD?

Domain driven design “大家都在哪里?”;散装;业务属于DDD?,domain-driven-design,abstraction,ddd-repositories,Domain Driven Design,Abstraction,Ddd Repositories,在DDD中,关键概念之一是Repository,它允许您检索实体(或聚合根),然后在更新后将其保存回去 假设我们需要对实体执行一些“批量”操作,而实体的数量使得将它们检索到内存中是绝对不可能的。即只能在数据库中执行操作 这种“批量”操作的地点在哪里?它应该是存储库上的方法吗?它不会用特定于数据库的操作“泄漏”存储库抽象吗?它不会将业务操作从实体移动到存储库吗 void DoLongInvolvedTask(); 我认为将批量任务作为方法放在存储库中没有任何错误。他们不会泄露任何东西。拥有批量操

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

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

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

void DoLongInvolvedTask();

我认为将批量任务作为方法放在存储库中没有任何错误。他们不会泄露任何东西。拥有批量操作并不意味着任何特定于数据库的操作,除非您的方法类似于RebuildDMSqlIndexOnMyBigtable()

域对象中不应有任何保存、检索逻辑(我假设您使用的是域模型)。这是存储库的责任。所以您的批量方法属于存储库

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

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

您需要的是所谓的域内驱动设计。服务用于为过程性任务建模。批量更新操作,如您所描述的,将是服务的理想候选者


编辑:原始链接消失。您可以在这里找到DDD术语表,但它没有原始页面有用

我认为这应该是一项服务


Evans在他的书中建议,当您因为认为某个类不属于某个类而怀疑是否要将一个“难闻”的方法放入该类时,请创建一个包含该操作的ServiceFoo类。

您是否在询问对一组记录执行大型更新?(比如说,用一个更新声明计算数百万的价格。)DDD服务的链接似乎死了(页面/域上没有内容)已经9年了,我希望有人能帮助回答这个后续问题。当我们实现该服务时,它会循环所有聚合并在之后将它们保存/添加回存储库吗?