读取可用数据和选定数据的模型
readmodel for available data and selected data
我正在尝试在我目前从事的项目中遵循 DDD 和 CQRS 原则。
我现在正在为设计决策而苦苦挣扎。
假设我有一个页面,其中包含用户可以订阅的主题列表。用户还可以看到他订阅了哪些主题。
我如何检索数据?是否分别查询主题和标记主题
例如
- GetTopics
- GetMarkedTopicsForUser
然后在视图中我施展魔法将两者结合起来,以便用户看到他的订阅。
或者我是否制作 1 个包含所有主题的模型并已标记用户已订阅的主题
例如
- GetTopicOverviewForUser
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,您想要一个结果视图...
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 次调用,除非有明显的(并且负责任的 - 即性能)优化它的理由。
我正在尝试在我目前从事的项目中遵循 DDD 和 CQRS 原则。 我现在正在为设计决策而苦苦挣扎。 假设我有一个页面,其中包含用户可以订阅的主题列表。用户还可以看到他订阅了哪些主题。 我如何检索数据?是否分别查询主题和标记主题
例如
- GetTopics
- GetMarkedTopicsForUser
然后在视图中我施展魔法将两者结合起来,以便用户看到他的订阅。 或者我是否制作 1 个包含所有主题的模型并已标记用户已订阅的主题
例如
- GetTopicOverviewForUser
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,您想要一个结果视图...
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 次调用,除非有明显的(并且负责任的 - 即性能)优化它的理由。