【发布时间】:2014-04-03 23:49:59
【问题描述】:
我们的架构分为命令和查询,它不完全是 CQRS,但我们尝试将这些东西分开。两者都使用相同的数据库。假设我们有这样的要求: 用户只能将消息发送到:
- 已启用消息系统的密友
- 它的好朋友是高级用户
- 致联系人列表中的任何管理员
当用户尝试向某人发送消息时,我们会检查这些要求,因此域规则是安全的。但是,现在我们需要向用户显示可能的消息收件人列表,并且所有这些规则都需要在查询端重复。这让我们很困扰。
这是违反 DRY 还是可以?如果要引入新规则,则必须在两个地方添加。有什么好的方法来处理这种情况吗?
【问题讨论】:
-
问题是您使用的是一个数据库,因此您不是完全 CQRS。您可以尝试使用 Write-DB 上的 Views 创建一个 Read-DB,以便读取部分仅是对这些视图的查询。
-
@ema 你的意思是在数据库中查看吗?然后我将在这个视图中重复这些规则。我考虑过创建非规范化表,但我不确定应该如何实现数据复制。我应该使用域事件还是数据库触发器?仍然有两个地方需要维护这些规则
-
数据库中的视图是一个选项,那么“逻辑”将隐藏在构建视图的查询中。如果您可以为只读数据创建一组不同的表,您可以使用域事件来非规范化该表中的数据,这样读取问题就只有“SELECT * FROM Table”
标签: architecture domain-driven-design cqrs