2013-06-12 34 views
2

比方说,我有我的域“项目”的实体,具有有一个唯一ID(在正常的数字ID的顶部)是2个字母+ 4位数字的每一个项目。这个ID在所有项目中必须是唯一的。在DDD体系结构中,唯一ID生成属于哪里?

我有困难的时候把这个功能,感觉应该差不多才刚刚被放置在仓库当项目保存第一次。

我确定它不属于应用程序服务,我不确定它是否是作为域服务的任何关注的业务层,并且将其作为基础结构服务感到奇怪,但它确实需要检查是否存在任何其他项目与随机生成的[LL]-[DDDD]类似的代码。

即使我周围放置它仍然呼吁从什么地方东西repository.save这个代码,所以问题是,我应该在哪里放,给我一个免费的随机ID像这样的服务?

+0

有多少用户正在同时创建会导致唯一性破坏的项目?这种情况发生的可能性有多大?自动化与管理员进行一次性修复相比,需要多少成本? –

回答

0

“自由随机ID”或ID代是基础设施,而不是商业领域,所以我将这种逻辑添加到一个持久层,并呼吁从我的资料库中的一部分。例如ProjectRepository。假设项目实体在任何情况下都会有'id'字段。您可以在项目实体中执行验证,以便id格式为2个字母和4位数字,但只能在项目ID与您的应用程序中的其他实体ID不同时使用

1

作为域的一部分的ID应由该域名。

如果域名没有定义,你不应该让他们在域或者任何IDS(严格地说,但它可能更容易将它们包括两种方式)。

1

你的问题提到了一个 '正常的ID'。我假设这是你的数据库的主键,你想在这里生成的ID是为人类(虽然为什么人类会使用2个字母+4位数的标识符是超出我的,但我看到更糟糕)。在这种情况下,密钥的生成是一项业务功能,并确保它是唯一的业务规则。这两件事都是域对象的责任。鉴于你的对象名称,项目和你在问题中使用的语言,我建议可能Projects对象应该提供这个服务。原因在于只有Projects对象才能查看您创建的所有项目对象以检查唯一性。

当然,你可以有一个算法来产生这个字段,确保唯一性,而不必检查所有项目(一个好主意,顺便说一句)。在这种情况下,您可能会允许项目在其生命周期的适当时间(可能在创建时)生成自己的ID。

相关问题