Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 域驱动设计如何在不同的有界上下文中显示已审核的属性?_C#_Domain Driven Design_Audit Trail - Fatal编程技术网

C# 域驱动设计如何在不同的有界上下文中显示已审核的属性?

C# 域驱动设计如何在不同的有界上下文中显示已审核的属性?,c#,domain-driven-design,audit-trail,C#,Domain Driven Design,Audit Trail,我们目前正在处理一个大型项目,该项目包含许多有界上下文,其中一个用于身份和访问控制,它包含用户、角色实体。用户登录后,可以使用任何其他模块(有界上下文), 我的问题-->我们需要显示有关在不同的有界上下文中创建或更新数据的用户的信息。例如,我们需要显示已审核的属性,例如,ModifiedBy,CreatedBy用户 对于这些问题,我有两种解决方案:- 跨有界上下文共享用户、角色 使用从有界上下文中获取聚合数据的优化SQL视图 请注意,我使用一个数据库,但对每个有界上下文使用不同的sachem

我们目前正在处理一个大型项目,该项目包含许多有界上下文,其中一个用于身份和访问控制,它包含用户、角色实体。用户登录后,可以使用任何其他模块(有界上下文), 我的问题-->我们需要显示有关在不同的有界上下文中创建或更新数据的用户的信息。例如,我们需要显示已审核的属性,例如,ModifiedByCreatedBy用户 对于这些问题,我有两种解决方案:-

  • 跨有界上下文共享用户、角色
  • 使用从有界上下文中获取聚合数据的优化SQL视图 请注意,我使用一个数据库,但对每个有界上下文使用不同的sachem

在DDD中,当您需要使用从一个有界上下文(BC)到另一个有界上下文的模型(如用户)时,您应该使用。这意味着您可能不会简单地使用同一个模型,而是使用一个简化的模型,即具有较少的属性,并且它必须是不可变的(只读)

因此,如果用户是IAC BC中的一个实体,具有许多属性和行为(读和写),那么在远程BC中它是一个实体,即,只有其
ID
Name
作为只读属性。ACL负责将远程实体转换为可在本地BC中安全使用的本地值对象

根据您的体系结构,ACL可以使用
CRON
作业来实现,可以定期从远程实体更新本地值对象,也可以在事件驱动体系结构(CQR,事件源)的情况下对远程事件作出反应。您甚至可以跟踪远程数据库,以获得几乎即时的更新

因此,每个BC都应该有自己的数据,其中的服务应该能够独立运行。如果一个BC中的服务停止,另一个BC中的服务应继续工作。将BCs视为模块


有些人将用户界面视为不同的BC。因此,在本例中,
优化的SQL视图
可以存在于这个单独的BC中,并充当具有内置ACL的模型。然而,它不能单独发挥作用。它还将其他BC连接在一起,强制您在所有BC中使用相同的数据库类型甚至实例。

跨模块共享用户和角色是很正常的。我不确定这里有什么问题?这是否完全满足您的需要?@yo2011此信息应始终与身份BC同步,还是执行操作时的用户快照(这应该更容易实现)?@guillaume31每次都应同步