如何在不违反命令和查询方面分离的情况下,基于元数据在CQRS中构建查询

时间:2015-09-06 15:14:04

标签: architecture cqrs

我查看了这些帖子,但未找到合适的答案:

CQRS: Read model built on demand?

CQRS - The query side

CQRS: business logic on the query side

我遇到了基于CQRS的架构。我理解查询端应该有一个瘦数据访问层,但在我的项目中,我需要根据来自其他域对象的元数据调整查询。

在互联网上的几篇文章中,报告数据库中的每个视图都有一个表。所以你需要一个像'SELECT * FROM Tablename WHERE ...'这样的SQL命令。这不适用于此,因为查询返回的列应该是可自定义的(通过列过滤器)。

这应该如下工作:

  1. 客户端调用查询,包含行的过滤器ID(WHERE部分)和列的另一个过滤器ID(SELECT部分​​)。
  2. QueryHandler根据基于两个过滤器ID的域服务提取的信息构建SQL查询
  3. 对数据库执行查询,结果返回给客户端
  4. 我正在努力解决的问题是在第2步中对域服务的依赖。对我而言,由于查询和命令端之间的分离,感觉不应该这样。

    这是解决这个问题的可接受方式吗?还是有另一种方法将双方分开?

1 个答案:

答案 0 :(得分:0)

我认为在您的第三个链接问题中给出的Dennis's answer可能是最好的 - 报告可以是与您网域其余部分不同的有限上下文。如果您认为您的存储过滤器与主域名是分开的,那么您仍然可以维持该主域名的分离。

你的阅读方有一些逻辑并不是问题。在这种情况下,您不会更改要返回的数据的含义。您的主域名中没有硬编码的业务逻辑。您拥有的逻辑是不同的有界上下文的一部分,您不一定使用CQRS进行建模(甚至CQRS的最大支持者也会告诉您不应该在任何地方使用CQRS。)

相关问题