读取可用数据和选定数据的模型

readmodel for available data and selected data

我正在尝试在我目前从事的项目中遵循 DDD 和 CQRS 原则。 我现在正在为设计决策而苦苦挣扎。 假设我有一个页面,其中包含用户可以订阅的主题列表。用户还可以看到他订阅了哪些主题。 我如何检索数据?是否分别查询主题和标记主题

例如

然后在视图中我施展魔法将两者结合起来,以便用户看到他的订阅。 或者我是否制作 1 个包含所有主题的模型并已标记用户已订阅的主题

例如

Let's say I have a page with a list of topics a users can subscribe to. The users also sees what topics he has subscribed to. How do I retrieve the data?

有多种方法可以做到这一点,但我会创建两个 read models:

  • AllTopics:所有主题的列表
  • UserWithTopics:查看用户订阅了哪些主题。

构建您的页面时,您可以使用这两种数据来查看用户可以在该页面中订阅哪些主题,并可能取消订阅。由于两端最多有50个主题,因此页面构建的性能应该不是问题。

这实际上归结为设计决策 - 您要向用户展示什么?

  1. 所有主题列表和当前订阅列表
  2. 所有主题,如果用户有订阅。

如果是 1,您想要一个结果视图...

var resultView = new TwoResultViews(avaiableTopics, subscriptionTopics);

returns

"res": {
  "availableTopics": 
  [
    {
       "topic": "topic1",
    }
  ],
  "subscribedTopics": 
  [
    {
       "topic": "anotherTopic"
    }
  ]
}

或者如果 2

var resultView = new SingleResultView(availableTopics, susbcrtiptionTopics);

returns

  [
    {
       "topic": "topic1",
       "subscribed": true
    }
  ],

无论哪种方式,您都希望对 API 进行 1 次调用,除非有明显的(并且负责任的 - 即性能)优化它的理由。