我已经阅读了关于聚合模式的内容,但我对这里的内容感到困惑。该模式指出应该通过聚合根访问属于聚合的所有对象,而不是直接访问。
我认为这就是为什么他们说你应该有一个每个聚合的存储库。
但我认为这会给应用程序带来明显的开销。例如,在典型的基于Web的应用程序中,如果我想获取属于聚合的对象(不是聚合根),该怎么办?我将不得不调用Repository.GetAggregateRootObject(),它加载聚合根及其所有子对象,然后遍历子对象以找到我正在寻找的对象。换句话说,我正在加载大量数据并将其丢弃,除了我正在寻找的特定对象。
这里有什么我想念的吗?
PS:我知道你们中的一些人可能会建议我们可以通过延迟加载来提高性能。但这不是我在这里要求的......聚合模式要求将属于聚合的所有对象一起加载,这样我们就可以强制执行业务规则。
答案 0 :(得分:0)
我不确定你在哪里读到这个“聚合模式”。请发布链接。
可能的一件事是我们将列表封装到另一个对象中。举一个简单的例子,如果我们有购物车而不是传递购物清单,我们会使用购物车对象。然后,可以将整个购物车上的代码(例如,获得总支出)封装在购物车中。我不确定这是否真的是一种模式,但谷歌找到了这个链接:http://perldesignpatterns.com/?AggregatePattern
我怀疑你什么时候说
“聚合模式需要这样做 属于聚合的所有对象 加载在一起,所以我们可以强制执行 商业规则。 “
这取决于您的业务规则。
通常,模式不应被视为一系列必须遵循的规则。作为开发人员,您需要认识到可以有效使用它们的位置。
在我们的购物车示例中,我们通常希望立即处理整个购物车。我们可能有业务规则,即我们的客户只能订购有限的商品 - 或者他们可以获得订购多件商品的折扣。因此阅读整篇文章是有道理的。
如果你采取不同的例子,例如。产品。您仍然可以拥有产品存储库,但不必一次性加载它们。您可能一次只想要一页产品。