根据DDD(蓝皮书,埃文斯),工厂有责任在有效状态下创建聚合根。这是否意味着它应该能够创建技术ID(mongoDB世界中的objectId)以及域ID?
一方面,这似乎是一个技术细节,让Mongo处理ID的创建似乎没问题。
另一方面,通过id(通过在DDD存储库中使用getById
)启用查询会向域公开技术ID,从而使工厂负责创建它。
也许我无法理解技术ID与DomainId的不同用例/重叠等,或者我可能过于热心,但无论如何我都会感激你的意见。
简而言之: 在DDD中:工厂是否应该能够创建技术ID和域ID?
可能的实施:Hi / Lo(How to set the hilo sequence starting value in MongoDB Norm?)
编辑:虽然hi / lo方式将Factory暴露给持久层,这只是存储库应该知道的。嗯
由于
答案 0 :(得分:3)
工厂不必关心ID,因为聚合的有效性与身份正交。可以通过几种不同的方式分配标识,作为来自关系数据库的增量ID,在这种情况下,存储库必须对其进行管理,或者作为UUID / GUID,在这种情况下,它可以由工厂或存储库分配,或者甚至是方便的调用客户端,因为客户端默认拥有密钥。
尽可能地,我尝试为聚合维护单个标识。我不确定MongoDB是否需要额外的技术ID,但如果确实如此,并且域ID不能代替它使用,那么MongoDB应该自己管理它并在幕后管理它。