Domain driven design 可用数据和选定数据的readmodel
我正在努力遵循DDD和CQRS的原则,在我目前正在进行的项目中。 我现在正在为一个设计决策而挣扎。 假设我有一个页面,其中包含用户可以订阅的主题列表。用户还可以看到他订阅了哪些主题。 如何检索数据?我是否分别查询主题和标记的主题 e、 gDomain driven design 可用数据和选定数据的readmodel,domain-driven-design,cqrs,Domain Driven Design,Cqrs,我正在努力遵循DDD和CQRS的原则,在我目前正在进行的项目中。 我现在正在为一个设计决策而挣扎。 假设我有一个页面,其中包含用户可以订阅的主题列表。用户还可以看到他订阅了哪些主题。 如何检索数据?我是否分别查询主题和标记的主题 e、 g GetTopics GetMarkedTopicsForUser 然后在视图中,我神奇地组合了2,这样用户就可以看到他的订阅。 还是制作一个包含所有主题并已标记用户订阅的主题的模型 e、 g GetTopicOverviewForUser 假设我有一个
- GetTopics
- GetMarkedTopicsForUser
- GetTopicOverviewForUser
- AllTopics:所有主题的列表
- UserWithTopics:查看用户已订阅的主题
构建页面时,您可以使用这两个数据查看用户可以在该页面中订阅哪些主题,也可以取消订阅。由于两端最多有50个主题,因此页面构造的性能不应该是一个问题。这实际上取决于设计决策-您将向用户展示什么
var resultView=新的两个resultView(可用主题、订阅主题);
返回
"res": {
"availableTopics":
[
{
"topic": "topic1",
}
],
"subscribedTopics":
[
{
"topic": "anotherTopic"
}
]
}
[
{
"topic": "topic1",
"subscribed": true
}
],
或者如果2
var resultView=new SingleResultView(可用主题、SUSBCRTIPTIONTOPS);
返回
"res": {
"availableTopics":
[
{
"topic": "topic1",
}
],
"subscribedTopics":
[
{
"topic": "anotherTopic"
}
]
}
[
{
"topic": "topic1",
"subscribed": true
}
],
无论哪种方式,您只需要调用一次API,除非有明显的(和可问责的-也称为性能)理由对其进行优化。几个问题:您的系统最多可以有多少主题?用户最多可以订阅多少个主题?对此的回答将影响您在建模方面的决策。主题的最大数量为50个。如果用户愿意,他可以选择50个主题中的所有主题。。。主要是关于它们是一起使用还是可以单独使用以及它们调用的频率?我还要注意,CQR是关于两个主要活动的分离(命令-更改状态&查询-检索状态)-这些是不同的模型,而不是实现细节。如果你正在谈论EventSourcing,那将是一个不同的话题。您可以优化选项2,以存储主题和订阅状态,但这需要进行其他权衡。我同意,否则,每个用户都将获得一个包含所有未订阅主题的大型阅读模型,在出现新主题时,总是需要更新,无需特殊原因。