领域对象的ID生成策略有三种比较常用,其中一种直接依赖数据库实现。
每次SnackMachine创建时,系统会从数据库中查询ID赋值给实体。这种方式有局限,且只能生成整形ID。依赖数据这种方式还不利于单元测试,所以这种方式不推荐。另一种方式是使用UUID:
public abstract class Entity{private UUID id;private Entity() {id= UUID.randomUUID();}public UUID getId(){return id;}}
1BA876A6-2D12-3CB3-CFF3-7A82A57B0863,此种方式没有上面所说的那些缺点,但略显笨重,且不能用整形表示。折中的方式是使用Hi/Lo 算法,它的实现是TableHiloGenerator。在这里,我们使用JPA的@GeneratedValue注解生成UUID。
