2015-09-06 55 views
0

我检查了这些帖子,但没有找到一个合适的答案:如何建立基于元数据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建立了基于基于两个滤波器
  3. 查询是针对数据库执行,并将结果返回给客户端

的ID域服务中提取信息的SQL查询什么我很苦恼的是在步骤2中的域服务的依赖。对我来说,这感觉应该不是,因为查询和命令端之间的分离。

这是一个可以接受的方式来处理这个问题,还是有另一种方法分隔双方?

回答

0

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

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