5

根据DDD(Blue book,Evans),工厂有责任在有效状态下创建一个聚合根。这是否意味着它应该能够创建技术ID(mongoDB世界中的objectId)以及域ID?DDD和MongoDB:可以让Mongo创建ObjectID吗?

一方面,这看起来像一个技术细节,让Mongo处理ID的创建似乎是可以的。

另一方面,通过id启用查询(通过在DDD存储库中使用getById)将技术ID公开给域,这反过来将使其成为Factory的职责来创建它。

也许我无法理解技术标识与DomainId的不同使用情况/重叠等问题,或者我过于热衷,但无论如何,我都会很感激您的意见。

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

可能的实现:高/低(How to set the hilo sequence starting value in MongoDB Norm?

编辑:虽然高/低的方式曝光工厂的持久层,这恐怕只有库应该知道。嗯

感谢

+0

轻微不完全相关的评论; MongoDB实际上并不创建这些ID,客户端(驱动程序)确实(除了upsert操作)。 – 2012-08-03 16:06:49

回答

3

工厂不必关心自己的ID,因为总的有效性是正交的身份。可以通过几种不同的方式分配标识,或者作为存储库必须管理它的关系数据库中的增量ID,或者作为UUID/GUID,在这种情况下,它可以由工厂或存储库分配,或者即使是呼叫客户端也很方便,因为客户端默认具有密钥。

只要有可能,我会尽量保持聚合的单一身份。我不确定MongoDB是否需要额外的技术ID,但如果它确实存在,并且域ID不能用于其位置,那么MongoDB应该自行管理它,并在幕后进行管理。

+0

“聚合的有效性与身份正交。”。在某些情况下,聚合必须有一个身份才能被称为有效? – 2012-08-03 09:29:20

+0

但的确,只有一个域名(应该在工厂设置好吗?)而不是技术ID。仍然无法解决为什么在mongodb中有一个单独的技术ID是首选(但不是必需的),但我想这是一个完全不同的问题 – 2012-08-03 13:13:51

+0

指定的标识值可以指示聚合是持久的,但有效性是不同的。我当然看到了这种关系,我只是认为身份在这方面得到了特殊的对待...... – eulerfx 2012-08-03 15:24:40