我对域事件有疑问。我正在使用DDD实现一个应用程序,是的,应用程序对于DDD来说足够复杂。
我的场景是Login Wcf服务,除了验证用户凭据并返回令牌外,还需要服务来创建会话并审核登录。为此,我为Session和Audit创建了两个独立的Domain Context,因为它们超出了Login的范围我打算在自己的Domain Context中提升域事件以处理这些事件,这一切都很好并且在每个组件之间保持清晰的有界上下文
问题是,Wcf实现的一部分位于SharedKernel中,因为所有Wcf服务都需要处理令牌的令牌验证,需要从客户端传递给Wcf服务以确保安全性。令牌的验证需要检查是否存在有效的会话(例如,数据库中存在具有相同令牌且未过期的记录),我正在努力实现这一点并有一些想法
我真的很挣扎,这是最好的方法,有没有人遇到过类似的问题,你有什么建议用最佳实践来实现这个?域事件是否是我需要实现的正确方法?
答案 0 :(得分:0)
我认为你可能使这更复杂,更难以实现:)
一个人通常拥有身份&访问控制这些类型的事物的有界上下文。那么,我肯定会把它们放在一起。这个BC与您的域模型几乎没有关系,所以可以从支持角色的角度来考虑它。
同步域事件可能也不是正确的命名。你当然可能需要同步电话。
所有这些交互都将发生在应用程序服务层,您的域不应该在移动时挖掘任何较低的基础架构类型位。而是在需要使用值时将基于域的表示传递到您的域中。
我过去使用的只是登录用户,创建会话,并将会话审核为单个任务。其他下游系统将调用中央 I& A 端点(在我的情况下为rest api)来检索指定令牌的会话VO。虽然您目前可能只需要true
/ false
次确认,但最终可能会收到一些有趣的数据,例如Upn
用于假冒,Claims
,{{ 1}}等。下游系统知道会话何时到期,因此很有可能为频繁的请求缓存会话。如果用户明确注销,系统事件可以从 I& A BC发布。这将允许下游系统订阅,例如,ExpiryDate
消息并删除缓存的会话。
一方面没有:我开始以不同于基于消息传递的事件(la服务总线)接近域事件,因为我发现域事件包含的信息少于应用程序可用的信息可以生成系统事件的服务层。这可能是域事件与事件采购非常吻合的原因。