c# - 领域服务可以引发领域事件吗?

标签 c# domain-driven-design domainservices domain-events

我想知道是否可以在域服务中引发域事件?我有这样一段用 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/

相关文章:

c# - StatusLabel - 如何重置或允许状态文本超时或消失

.net - 我应该在 DDD .NET 中为有界上下文使用单独的项目吗?

domain-driven-design - 域驱动设计中实体的每个属性是否都是值对象?

silverlight-3.0 - 通过 Ria DomainService 调用方法返回关联成员

silverlight-4.0 - Entity Framework 4 和 SQL Server 2008 R2 更改数据捕获不能很好地协同工作

c# - Unity Slider 减少作为定时器

c# - Await Task.WhenAll() 内部任务不等待

C# Xamarin iOS RegisteredForRemoteNotifications 从未触发

domain-driven-design - DDD项目中使用哪些类型的书面设计文档?

silverlight - 带有 ObservableCollections 的 ObservableCollection 无法正确呈现