在命令和查询中重复逻辑

时间:2014-03-13 10:21:45

标签: architecture domain-driven-design cqrs

我们的架构在命令和查询中分为不完全CQRS,但我们尝试将这些事物分开。两者都使用相同的数据库。假设我们有要求说: 用户只能向以下地址发送消息:

  1. 已启用邮件系统的亲密朋友
  2. 其高级用户的亲密朋友
  3. 联系人列表中的任何管理员
  4. 当用户尝试向某人发送消息时,我们会检查这些要求,因此域规则是安全的。但是现在我们需要向用户显示可能的邮件收件人列表,并且所有这些规则都需要在查询端重复。这困扰着我们。

    这是DRY的违规还是没问题?如果引入新规则,则必须在两个地方添加。有没有办法处理这种情况呢?

2 个答案:

答案 0 :(得分:1)

有多种方法可以共享代码。如果你在一个数据库中,那么一个简单的视图可能会成功。限制潜在收件人的查询不具有权威性;只有命令才能进行最终验证。该查询只是帮助用户。该命令将在某个已知的事务边界下执行,以确保遵循该规则。

答案 1 :(得分:0)

  

"当用户尝试向a发送消息时,我们会检查这些要求   人,所以域规则是安全的。但是现在我们需要显示列表   可能的邮件收件人对用户和所有这些规则的需要   在查询方面重复。这让我们感到困扰。"

如果您对域和读取模型使用相同的数据库,那将如何重复?即使您使用一个数据库来处理所有内容,在您的域上并阅读模型处理程序,您也应该使用只读存储库对其进行抽象。另外关于你提到DRY,你会在CQRS架构中有很多,因为其中一个目标是能够更快地检索它而不需要进行大量查询,因此你将以不同的方式重复数据。模型。