DDD和MongoDB:让Mongo创建ObjectID是否可以?

Gee*_*Jan 5 domain-driven-design hilo factory-pattern mongodb object-identity

根据DDD(蓝皮书,埃文斯),工厂有责任在有效状态下创建聚合根.这是否意味着它应该能够创建技术ID(mongoDB世界中的objectId)以及域ID?

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

另一方面,通过id(通过getById在DDD存储库中)进行查询会将技术ID公开给域,这反过来又会使工厂负责创建它.

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

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

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

编辑:虽然hi/lo方式将Factory暴露给持久层,这只是存储库应该知道的东西.嗯

谢谢

eul*_*rfx 3

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

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