在我的业务逻辑中,用户
可以通过他/她的手机号码来识别。第三方验证系统确保客户的电话号码真实存在,并在将用户
记录插入表格之前检查唯一性。在我看来,PhoneNumber
已经是唯一的,所以Id
是不必要的。
这是我当前的用户
课程PhoneNumber
当前是User
类中的值对象。
public class User : AggregateRoot<Guid>
{
public Guid Id {get; private set;}
public PhoneNumber PhoneNumber { get; private set; }
public Birthday Birthday { get; private set; }
public Gender Gender { get; private set; }
public Name Name { get; private set; }
}
我想改变如下。
public class User : AggregateRoot<string>
{
public string PhoneNumber { get; private set; }
public Birthday Birthday { get; private set; }
public Gender Gender { get; private set; }
public Name Name { get; private set; }
}
如果在聚合根或实体中使用非UUID Id,是否存在任何缺陷?
不,您可以使用手动生成的ID。如果您正在使用实体框架,并且不想将PhoneNumber name更改为Id,则需要使用[Key]属性,否则实体将无效,因为实体框架将无法识别主键。
PhoneNumber已经是唯一的,所以Id是不必要的。
电话号码分配改变;因此,您需要仔细考虑这对您的设计的影响(您的结论可能是“在这种情况下,我们将对数据进行手动更正”)。
在大多数情况下,关于“自然关键点”和“代理关键点”的争论仍然存在。
如果在聚合根或实体中使用非UUID Id,是否存在任何缺陷?
UUID不是必需的;你可以在正确的条件下使用整数。
一个有用的特性是,系统中的所有对象都具有相同的大小键;您的“标识符”逻辑是通用的,您可以报告有关标识符的信息,而无需提前知道标识的是什么。使用UUID可以实现这一点。
UUID的另一个有趣特性是,我们有从数据计算UUID的标准方法(请参阅“命名UUID”);因此,您可能会获取一些业务数据——比如电话号码——生成相应的UUID,然后将其用作标识符(这会为您提供所有内容的相同性——UUID——但不会解决“如果电话号码发生变化怎么办?”问题)。
PhoneNumber已经是唯一的,所以Id是不必要的。
除了独特性之外,还有另一个非常重要的考虑因素:电话号码是PII。如果你的软件可能在美国、欧盟,甚至可能是世界上大多数国家使用,你就不能用它作为一个标识符,因为遵守隐私条例是非常困难的。例如,您不能记录它(这将使故障排除变得不可能),并且您需要能够在用户请求删除其数据的任何时候删除它,这在您需要保持数据库中的数据完整性时可能非常棘手(大多数情况下,您可以删除PII,而不删除数据库中的实际记录,但如果您的PK是PII,则会出现问题)。
这适用于添加或更新。但是,随着时间的推移,员工可能会被删除或重新分配到另一个部门。我认为删除应该是发送到EMPLOYEE主题的tombstone记录(k:empid,v:null)。但是,我不再拥有departmentId,我必须进行空检查(并为departmentId返回空),因此删除员工时不会发生removeEmployee。DepartmentID的更改也有类似问题。 那么,Kafka的方法
我正在尝试创建一个公钥以允许我推送到Git,但我的. ssh文件夹尚未创建。 以下是我运行的命令: $ssh-keygen-t rsa-Cemaill@me.com 生成公共/私有rsa密钥对 输入保存密钥的文件(/h/.ssh/id\u rsa): 这就是H:驱动器配置、数据、配置文件、配置文件中的全部内容。V2 我认为有一个问题,因为当我得到提示输入文件,其中保存密钥(/h//. ssh/id
我的客户端应用程序生成的数据在设备上加密。加密密钥通过HTTPS发送给Azure函数,该函数使用Azure密钥库存储加密密钥,以便其他授权的客户机可以获得加密密钥并解密数据。 下面是我的Azure函数中执行将加密密钥(秘密)保存在密钥库中的工作的一段代码: 问题 这样的设计是不是对Azure Key Vault的适当使用?
问题内容: 我有一个字段,例如,在表中应该是唯一的。 使用Spring / Hibernate验证进行验证的最佳方法是什么? 问题答案: 一种可能的解决方案是创建自定义约束(和相应的验证器)。并要查找数据库中的现有记录,请提供(或Hibernate)to 的实例。 EntityManagerAwareValidator ConstraintValidatorFactoryImpl 唯一键 Uniq
如果我尝试使用OpenSSL命令行生成3TDES加密的PKCS 8密钥: 我得到: PKCS8 RFC没有说明必须使用哪种算法来创建密钥块。它确实给出了PKCS5算法作为例子。有没有办法使用OpenSSL创建一个由DES密钥加密的PKCS8密钥?如果不是,它是OpenSSL不支持的还是一个非常不标准的事情? 下面是通过OpenSSL命令行(密码测试)使用基于密码的加密创建的示例: 这里是我手工制作
问题内容: 我有两个表,和。有一个字段,它通过外键指向具有相同名称的字段。它还具有在该字段上声明的唯一密钥。不可为空。这意味着关系必须为0..1到1,因为每个 记录都必须具有唯一的而不是空的记录。 实体框架不这样看。我收到以下错误: 这是什么问题 如何使EF识别适当的关系多重性? 问题答案: EF抱怨是因为听起来您正在使用FK关联-这意味着VisualizationID是Entity的属性,并且也