gpt4 book ai didi

domain-driven-design - 我可以在一个事务中更新多个相同类型的聚合实例吗?

转载 作者:行者123 更新时间:2023-12-04 08:22:29 26 4
gpt4 key购买 nike

抱歉,如果重复了,我在SO中进行了大量搜索,但没有找到匹配的问题。

我知道我们不应该在一个事务中更新多个聚合实例。但是,我认为这里的“多个聚合实例”是指不同聚合类型的多个实例。我对吗?

假设产品 BacklogItem 是两个不同的聚合,因此我们应避免在一个事务中同时更新Product和BacklogItem。

但是,如果我需要更新同一聚合类型的多个实例怎么办?说,我需要更新所有产品的名称。最好的解决方法是什么?

伪代码

//Application Service
public void ChangeTitle(string newName)
{
using(uow.BeginTransaction())
{
IEnumerable<Product> products = repo.GetAll();
foreach(var product in products)
{
product.ChangeName(newName);
}
}
}

最佳答案

AR的类型无关紧要,AR始终是事务边界。当与其中许多人一起工作时,通常应该包含部分故障和最终的一致性。
如果在所有这些AR中都没有不变性来保护,为什么所有重命名都会失败或成功。例如,如果UI确实允许用户一次重命名多个产品,而某些用户重命名了数百个产品。例如,如果一个产品由于并发冲突而无法重命名,那么最好不要重命名任何一个产品或通知用户其中一个产品失败了吗?
您总是可以违反规则,但是您必须了解,事务中涉及的AR越多,由于并发冲突(假设可能发生争用),您遇到事务失败的可能性就越大。
我通常只在一个事务跨越AR边界的情况下才在一个事务中修改多个AR,而我无可避免地避免了最终的一致性。

关于domain-driven-design - 我可以在一个事务中更新多个相同类型的聚合实例吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42103685/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com