1

我有一个关于领域事件的问题。我正在使用 DDD 实现一个应用程序,是的,该应用程序对于 DDD 来说足够复杂。

我的场景是一个登录 Wcf 服务,除了验证用户凭据并返回一个令牌之外,该服务还需要创建一个会话并审核登录。为此,我为会话和审计创建了两个单独的域上下文,因为它们超出了登录的范围.

问题是,Wcf 实现的一部分位于 SharedKernel 中,这是所有 Wcf 服务处理令牌的令牌验证的要求,该令牌需要从客户端传递给 Wcf 服务以确保安全。令牌的验证需要检查是否存在有效的会话(例如,数据库中有一条具有相同令牌且未过期的记录),我正在努力解决如何最好地实现这一点并有一些想法

  1. 我相信,由于 Session 在它自己的有界上下文中,我应该引发一个返回结果的同步域事件,毕竟我只需要一个 true/false 来确认令牌的有效会话
  2. 或者; 我可以在共享内核中为此实现一个域上下文来处理这个问题,但这意味着在共享内核中拥有域实体和 EF 上下文,并且可能在会话的有界上下文之外。

我真的很纠结哪种方法是最好的,有没有人遇到过类似的事情,你对用最佳实践来实现这个有什么建议?领域事件是我需要实现的正确方法吗?

4

1 回答 1

0

我认为您可能会使这变得比需要的更复杂和更难:)

对于这些类型的事物,通常有一个身份和访问控制有界上下文。好吧,当然会把它们放在一起。此 BC 与您的域模型几乎没有关系,因此可以将其视为支持角色。

同步域事件可能也不是完全正确的命名。不过,您当然可能需要同步调用。

所有这些交互都将发生在应用程序服务层,并且您的域在移动时不应该深入挖掘任何较低的基础设施类型位。如果您需要使用这些值,请改为将基于域的表示传递到您的域中。

我过去使用的是简单地登录用户,创建会话,并将会话作为单个任务进行审核。其他下游系统将调用中央I&A端点(在我的情况下为 rest api)以检索指定令牌的会话 VO。尽管您目前可能只需要true/false确认,但您最终可能会在结果中得到一些有趣的数据,例如Upn模拟、ClaimsExpiryDate等。下游系统知道会话何时到期,因此很有可能将会话缓存到频繁的请求。如果用户明确注销,系统事件可以从I&A BC 发布。这将允许下游系统订阅,例如,SessionEndedEvent消息并删除缓存的会话。

顺便说一句:我已经开始以与基于消息传递的事件(la service bus)不同的方式处理域事件,因为我发现域事件包含的信息少于可以生成系统事件的应用程序服务层可用的信息。这可能就是为什么域事件与事件溯源非常吻合的原因。

于 2016-03-28T10:28:52.697 回答