gpt4 book ai didi

聚合模式和性能问题

转载 作者:行者123 更新时间:2023-12-02 23:32:02 24 4
gpt4 key购买 nike

我已经阅读了有关聚合模式的内容,但我对这里的某些内容感到困惑。该模式规定,属于聚合的所有对象都应该通过聚合根访问,而不是直接访问。

我假设这就是为什么他们说每个聚合应该有一个存储库的原因。

但我认为这给应用程序增加了明显的开销。例如,在典型的基于 Web 的应用程序中,如果我想要获取属于聚合(不是聚合根)的对象,该怎么办?我必须调用 Repository.GetAggregateRootObject(),它会加载聚合根及其所有子对象,然后迭代子对象以找到我要查找的对象。换句话说,我正在加载大量数据并将它们扔掉,除了我正在寻找的特定对象。

我在这里缺少什么吗?

PS:我知道你们中的一些人可能会建议我们可以通过延迟加载来提高性能。但这不是我在这里要问的...聚合模式要求将属于聚合的所有对象加载在一起,以便我们可以强制执行业务规则。

最佳答案

我不确定您在哪里读到这个“聚合模式”。请发布链接。

可能的一件事是我们将列表封装到另一个对象中。举一个简单的例子,如果我们有一个购物车,而不是传递购买列表,我们会使用购物车对象。然后,可以将适用于整个购物车的代码(例如获取总支出)封装在购物车中。我不确定这是否真的是一种模式,但谷歌找到了这个链接:http://perldesignpatterns.com/?AggregatePattern

我怀疑你说

"The aggregate pattern requires that all objects belonging to the aggregate be loaded together, so we can enforce business rules. "

这取决于您的业务规则。

一般来说,模式不应被视为所有事情都必须遵循的一组规则。作为开发人员,您需要认识到可以在何处有效地使用它们。

在我们的购物车示例中,我们通常希望立即处理整个购物车。我们可能有业务规则,规定我们的客户只能订购有限的商品 - 或者他们可能会因订购多件商品而获得折扣。因此,阅读整篇文章是有意义的。

如果你举一个不同的例子,例如。产品。您仍然可以拥有一个产品存储库,但您不必一次加载它们。您可能一次只需要一页产品。

关于聚合模式和性能问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2533162/

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