我们目前正在开展一个包含大量有界上下文的大型项目,其中一个用于身份和访问控制,它包含用户,角色实体。用户登录后,他可以使用任何其他模块(Bounded Contexts), 我的问题 - >我们需要显示有关在不同有界上下文中创建或更新数据的用户信息,例如,我们需要显示审计属性,例如 ModifiedBy , CreatedBy 用户 对于这些问题,我有两个解决方案: -
答案 0 :(得分:2)
在DDD中,当您需要使用从一个有界上下文(BC)到另一个有界上下文的模型(如用户)时,您应该使用Anti-corruption layer。这意味着您不能简单地使用相同的模型,而是使用简化的模型,即具有较少的属性,并且必须是不可变的(只读)。
因此,如果用户是IAC BC中的实体,具有许多属性和行为(读取和写入),则在远程BC中它是Value object,即只有ID
和Name
作为只读属性。 ACL负责将远程实体转换为本地BC中可以安全使用的本地Value对象。
根据您的体系结构,可以使用CRON
作业实施ACL,定期从远程实体更新本地Value对象,或者在事件驱动架构的情况下对远程事件做出反应(CQRS,事件采购) )。您甚至可以将远程数据库oplog拖尾以进行近乎即时的更新。
因此,每个BC应该有自己的数据,并且其中的服务应该能够独立运行。如果一个BC中的服务出现故障,那么另一个BC中的服务应该继续工作。将BC视为模块。
有些人将用户界面视为不同的BC。因此,在这种情况下,optimized SQL views
可以存在于这个单独的BC中,并充当具有内置ACL的模型。然而它不能单独起作用。它还通过强制您在所有BC中使用相同的数据库类型甚至实例来将其他BC耦合在一起。