DDD - 为什么实体的身份不仅仅是原始类型?

DDD - Why are the identities of entities not just a primitive type?

将实体的 Id 定义为自定义类型而不是原始类型(数据库驱动的程序员通常这样做)的目的是什么?

首先,域实体的设计必须独立于存储(另一个问题是有时这是不可能的,但让我们假设一下)。在现实世界(或域世界)中,实体通常具有复杂的身份,如名字、姓氏和密码。这不是原始人。人们从出生起就没有 int Id,但他们有姓名和其他文件。因此,您需要将其转换为您的领域模型。当然,有时候,你没有这么复杂的标识,你可以用一些更简单的标识来代替它,比如 int number。但是在这两种情况下,如果您尝试使用 DDD,您的选择不应该基于数据库(这很困难,是的)。稍后,您创建从域实体到表或其他存储的映射。