领域驱动设计检查规则获取数据

问题描述

我在 DDD 中使用了 CQRS 模式,
我有一些使用 Dapper 编写的查询
获取数据之前,我需要检查一些规则。
我的主要问题:这些规则必须用域模型处理吗? (从存储库中获取的域模型)?
例如:
我想获取特定“金融集团”的所有支付交易,在获取数据之前,必须检查当前用户是否是“金融集团”的成员之一。
在这个检查必须用我的域模型(“金融组”)来处理吗?
然后在我的查询处理程序(CQRS 模式)中,我必须注入我的存储库以获取域模型? 我认为必须是仅用于命令的加载域模型?并且对于查询不得加载域模型。

解决方法

我将首先解决一个关于你说你“必须做”某事,因为某些模式告诉你这样做的问题。在这里问的正确问题是“我应该这样做吗”?要回答这个问题,您必须自己评估该方法的利弊。

当您使用 Dapper 并在查询端执行所有这些操作时,使用绑定到特定聚合根的存储库将是困难且不必要的。

根据我对您的模型的理解,它可能像这样简单:

验证执行查询的用户是特定财务组的成员(授权,在代码中完成)

如果用户可以访问特定的财务组 -> 使用 dapper 执行查询,例如:

SELECT *
FROM PaymentTransactionsReadTable pt
WHERE pt.FinancialGroup = @FinancialGroupParameter

如果否,则返回非授权结果、异常等

请记住,您使用 Dapper 执行的查询可以跨越多个聚合、执行连接、交叉应用等,因为在某种意义上,您的 QUERY 来自 CQRS。