REST DID汇总的新ID

问题描述 投票:0回答:1

这个问题乍一看对我来说似乎很愚蠢,但是后来我意识到我还没有一个正确的答案,有趣的是,在我的搜索中也找不到很好的解释。我是域驱动设计概念的新手,因此,即使问题很简单,也可以随时添加任何注意事项。

[我正在用Rest API设计以配置服务器实例,然后我想到了一个名为Instance的聚合,其中包含Configurations的列表,在给定的时间只有一个特定的配置处于活动状态。

要添加配置,将调用端点POST /instances/{id}/configurations,并将主体置于所需的配置上。作为响应,如果一切正常,它将收到带有包含新配置ID的标头位置的HTTP 204。

我计划只有一个控制器InstanceController,它将调用InstanceService来操纵实例聚合,然后将其存储到存储库。

由于ID是由存储库生成的,如果我依次调用Instance.addConfigurationInstanceRepository.store,我将如何获取新创建的配置的ID?我的意思是,这是一个列表,因此调用Instance.configuration.identity

并不简单

一个选项将在实例中实现一个方法,例如getLastAddedConfiguration,但这似乎很脆弱。

在这种情况下,一般的做法是什么?

rest architecture aggregate domain-driven-design ddd-repositories
1个回答
0
投票

ID由存储库生成

您可以消除这种额外的复杂性。由于ConfigurationInstance集合的实体,因此Id仅需要在集合内部是唯一的,而不需要在整个应用程序中唯一。因此,最简单的方法是,在ConfigurationId方法中,集合为Instance.addConfiguration赋值(因为集合可以轻松确保新Id的唯一性)。此方法可以返回新的ConfigurationId(或必要时返回带有ID的整个对象)。

这种情况下的一般方法是什么?

我不确定一般方法,但是我认为,创建ID越早越好。对于聚合,您可以在存储ID(可能是GUID)之前创建ID,对于实体,聚合可以在创建/添加实体时创建它。这使您可以使用这些Id执行其他操作(例如发布事件),而不必从数据库中存储和检索Id,这必然会对实现和使用存储库的方式产生影响,这并不理想。

© www.soinside.com 2019 - 2024. All rights reserved.