我想知道是否可以在域服务中引发域事件?我有这样一段用 C# 编写的代码。它当然有效,但从 DDD 的角度来看它是否正确?
第一个例子与用户删除有关。在我的系统帐户中有多个用户。删除用户后引发 AccountUserRemovedDomainEvent。然后基础设施层的订阅者处理审计日志管理。它添加了描述此操作的适当日志。
public void RemoveUser(AccountUserEntity user, AccountEntity account)
{
AccountUserRepository.Delete(user);
DomainEvents.Raise(new AccountUserRemovedDomainEvent(user));
}
这是第二个例子。在这种情况下,除了在基础设施层创建审核日志订阅者外,还会向用户发送带有激活链接的邮件。
public void SaveAccountUser(AccountUserBasicInformation information, AccountEntity account)
{
var user = Mapper.Map<AccountUserEntity>(information);
account.Users.Add(user);
user.Account = account;
DomainEvents.Raise(new AccountUserAddedDomainEvent(user));
}
最佳答案
域事件通常是将操作/命令应用于域对象的结果。因此,它可能不是域服务所关心的事情。您可能需要一些技术系统事件/消息,但它们有点不同,不会在域服务中。
我喜欢有一个方法返回有助于测试的域事件,而不是引发事件的单例。如果您最终得到一个与多个域对象交互的域服务,您可以选择返回事件,但无论如何使用事件源时,您可能需要添加事件的事件流。根据您的实现,聚合也可以跟踪新事件。在这两种情况下,您都有一个事件容器,因此无论如何都不需要返回/引发它们。
关于c# - 领域服务可以引发领域事件吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62391332/