C# 可以在域服务中引发域事件吗?

C# 可以在域服务中引发域事件吗?,c#,domain-driven-design,domainservices,domain-events,C#,Domain Driven Design,Domainservices,Domain Events,我想知道是否可以在域服务中引发域事件?我用C语言编写了这样一个代码。当然它是有效的,但是从DDD的角度来看它是正确的吗 第一个示例与用户删除相关。在我的系统中,帐户有多个用户。用户删除后,引发AccountUserRemovedDomainEvent。然后,基础结构层中的订户处理审核日志管理。它添加了描述此操作的适当日志 public void RemoveUser(AccountUserEntity user, AccountEntity account) { AccountUserRep

我想知道是否可以在域服务中引发域事件?我用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));
}
public void SaveAccountUser(AccountUserBasicInformation信息,AccountEntity帐户)
{
var user=Mapper.Map(信息);
account.Users.Add(用户);
user.Account=Account;
DomainEvents.Raise(新帐户UserAddedDomainEvent(用户));
}

域事件通常是应用于域对象的操作/命令的结果。因此,域服务可能不关心它。您可能需要一些技术系统事件/消息,但它们有点不同,不在域服务中


我希望有一个方法返回域事件,这有助于测试,而不是引发事件的单例。如果您最终得到一个与多个域对象交互的域服务,您可以选择返回事件,但在使用事件源时,您可能需要将事件添加到事件流中。根据您的实现,聚合还可以跟踪新事件。在这两种情况下,您都有一个事件容器,因此无需返回/引发它们。

此处显示的两个示例与Evans在DDD手册(参见第5章)中描述的“域服务”模式不匹配。