加入收藏 | 设为首页 | 会员中心 | 我要投稿 安卓应用网 (https://www.0791zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 程序设计 > 正文

DDD(Domain-Driven-Design) – 大型聚合

发布时间:2020-05-23 19:10:45 所属栏目:程序设计 来源:互联网
导读:我目前正在研究Eric Evans’es Domain-Driven-Design.聚合的想法对我来说很清楚,我发现它非常有趣.现在我想到一个像聚合的例子: BankAccount(1)—- (*)交易. BankAccountBigDecimal calculateTurnover(); BankAccount是一个聚合.为了计算营业额,我应该遍历所

我目前正在研究Eric Evans’es Domain-Driven-Design.聚合的想法对我来说很清楚,我发现它非常有趣.现在我想到一个像聚合的例子:

BankAccount(1)—-> (*)交易.

BankAccount
BigDecimal calculateTurnover();

BankAccount是一个聚合.为了计算营业额,我应该遍历所有交易并总结所有金额.埃文斯假设我应该使用存储库来加载aggreagates.在上面的例子中,可能有几万个事务,我不希望在内存中同时加载.

In the context of the repository pattern,aggregate roots are the only objects > your client code loads from the repository.

The repository encapsulates access to child objects – from a caller’s perspective it automatically loads them,either at the same time the root is loaded or when they’re actually needed (as with lazy loading).

你有什么建议在DDD聚合中实现calulcateTurnover?

正如您所指出的,在聚合中加载1000个实体不是可扩展的解决方案.您不仅会遇到性能问题,而且您可能也会遇到并发问题,正如Vaughn Vernon在其 Effective Aggregate Design系列中所强调的那样.

您是希望每笔交易都可以在BankAccount汇总中使用,还是只关注营业额?

如果它只是您需要的营业额,那么您应该在实例化您的BankAccount聚合时建立此值.这可能是由您的数据存储技术(索引的JOIN,例如,如果您使用SQL)有效计算的.也许您还需要考虑将此作为数据存储中预先计算的值(当您开始处理每个银行帐户的数百万个交易时会发生什么情况)?

但是,您可能还需要域中可用的交易吗?然后你应该考虑拥有一个单独的事务存储库.

我强烈建议阅读Vaughn Vernon关于聚合设计的系列文章,如上所述.

(编辑:安卓应用网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读