C# 域驱动设计如何在不同的有界上下文中显示已审核的属性?
我们目前正在处理一个大型项目,该项目包含许多有界上下文,其中一个用于身份和访问控制,它包含用户、角色实体。用户登录后,可以使用任何其他模块(有界上下文), 我的问题-->我们需要显示有关在不同的有界上下文中创建或更新数据的用户的信息。例如,我们需要显示已审核的属性,例如,ModifiedBy,CreatedBy用户 对于这些问题,我有两种解决方案:-C# 域驱动设计如何在不同的有界上下文中显示已审核的属性?,c#,domain-driven-design,audit-trail,C#,Domain Driven Design,Audit Trail,我们目前正在处理一个大型项目,该项目包含许多有界上下文,其中一个用于身份和访问控制,它包含用户、角色实体。用户登录后,可以使用任何其他模块(有界上下文), 我的问题-->我们需要显示有关在不同的有界上下文中创建或更新数据的用户的信息。例如,我们需要显示已审核的属性,例如,ModifiedBy,CreatedBy用户 对于这些问题,我有两种解决方案:- 跨有界上下文共享用户、角色 使用从有界上下文中获取聚合数据的优化SQL视图 请注意,我使用一个数据库,但对每个有界上下文使用不同的sachem
- 跨有界上下文共享用户、角色
- 使用从有界上下文中获取聚合数据的优化SQL视图 请注意,我使用一个数据库,但对每个有界上下文使用不同的sachem
ID
和Name
作为只读属性。ACL负责将远程实体转换为可在本地BC中安全使用的本地值对象
根据您的体系结构,ACL可以使用CRON
作业来实现,可以定期从远程实体更新本地值对象,也可以在事件驱动体系结构(CQR,事件源)的情况下对远程事件作出反应。您甚至可以跟踪远程数据库,以获得几乎即时的更新
因此,每个BC都应该有自己的数据,其中的服务应该能够独立运行。如果一个BC中的服务停止,另一个BC中的服务应继续工作。将BCs视为模块
有些人将用户界面视为不同的BC。因此,在本例中,
优化的SQL视图
可以存在于这个单独的BC中,并充当具有内置ACL的模型。然而,它不能单独发挥作用。它还将其他BC连接在一起,强制您在所有BC中使用相同的数据库类型甚至实例。跨模块共享用户和角色是很正常的。我不确定这里有什么问题?这是否完全满足您的需要?@yo2011此信息应始终与身份BC同步,还是执行操作时的用户快照(这应该更容易实现)?@guillaume31每次都应同步