5

根据 DDD(蓝皮书,Evans),工厂有责任创建处于有效状态的聚合根。这是否意味着它应该能够创建技术 id(mongoDB 世界中的 objectId)以及域 id?

一方面,这似乎是一个技术细节,让 Mongo 处理 ID 的创建似乎没问题。

另一方面,启用按 id 查询(通过getById在 DDD 存储库中)将技术 id 暴露给域,这反过来又会使工厂负责创建它。

也许我无法理解技术 ID 与 DomainId 的不同用例/重叠等,或者我可能过于热心,但无论如何我都会很感激你的意见。

简而言之:在 DDD 中:工厂是否应该能够创建技术 ID 以及域 ID?

可能的实现:Hi/Lo(如何在 MongoDB Norm 中设置 hilo 序列起始值?

编辑:虽然 hi/lo 方式将工厂暴露给持久层,但只有存储库应该知道。嗯

谢谢

4

1 回答 1

3

工厂不必关心 ID,因为聚合的有效性与身份正交。可以通过几种不同的方式分配身份,或者作为来自关系数据库的增量 ID,在这种情况下,存储库必须对其进行管理,或者作为 UUID/GUID,在这种情况下,它可以由工厂或存储库分配,或者甚至调用客户端也很方便,因为默认情况下客户端具有密钥。

只要有可能,我都会尝试为聚合维护一个单一的身份。我不确定 MongoDB 是否需要额外的技术 ID,但如果需要并且域 ID 不能用于其位置,那么 MongoDB 应该自行管理并在幕后管理它。

于 2012-08-03T04:08:59.407 回答