gpt4 book ai didi

c# - DDD 使用事件或服务?

转载 作者:行者123 更新时间:2023-12-05 06:22:58 29 4
gpt4 key购买 nike

大家好,我是 ddd 设计的新手,正在尝试使用这种在 C# 中工作的模式开发我的第一个应用程序

在我的应用程序中,我有一个包含子实体 Assets 的聚合合约,当添加或结算 Assets 时,我应该在另一个聚合账户中执行会计操作,并在业务逻辑中确保它。

我是否应该创建一个域服务来确保契约(Contract) Assets 中的每个操作都会产生一个帐户操作,并在应用层调用此服务发送一个帐户实体集合。或者我应该将存储库注入(inject)此服务以加载帐户列表并保存帐户和操作列表中的更改。

或者甚至让 Assets 实体中的方法引发强制更改帐户的事件。如果这是正确的方法,事件句柄应该在域或应用程序中?如果在域中,帐户实体中的处理程序是否应该通过注入(inject)的存储库执行更改?

有点迷茫

最佳答案

通常这类问题可以使用事件优雅地解决,并关注每个事务的一个聚合。

假设您的用例是向合约添加 Assets 。

您将拥有一个带有 ContractRepository 的应用程序服务,该服务将检索契约(Contract),并且将在该契约(Contract)上调用方法 addAsset

当您将 Assets 添加到您的契约(Contract)聚合时,该聚合将记录一个域事件,例如 AssetAdded,以及有关该操作的所有相关信息。然后您的应用程序服务会将更新后的合约保存在数据库中,然后它将事件发布到异步总线。此时您可以发送回复。

您的应用程序中的某些订阅者将收到有关该事件的通知并会做一些事情。在这种情况下,您可以拥有一个 UpdateAccountOnAssetAdded,它将在内部完成剩余的工作。

This article将帮助您了解在这种架构中一切都是如何组织的。

祝你好运!

关于c# - DDD 使用事件或服务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58812598/

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