Domain driven design DDD更改聚合根id

Domain driven design DDD更改聚合根id,domain-driven-design,aggregateroot,Domain Driven Design,Aggregateroot,在一次讨论中,我得到了以下问题。在银行域中,有一个聚合根Account,由帐号标识。假设在某个时间点,由于某些原因,银行已决定将所有账户从8位数字更改为12位数字,并且该账户在一年内可以使用这两个数字访问,此后将只使用新的数字,应如何以DDD方式进行处理,我想知道它是否会创建一个新的有界上下文,其中包含一个您始终希望拥有技术id的实体,即一个不可变且由您的应用程序控制的id(UUID)属性。自然idAccountNumber仅为值对象。基本上,由于技术原因,在你的应用程序中只使用Id,Accou

在一次讨论中,我得到了以下问题。在银行域中,有一个聚合根Account,由帐号标识。假设在某个时间点,由于某些原因,银行已决定将所有账户从8位数字更改为12位数字,并且该账户在一年内可以使用这两个数字访问,此后将只使用新的数字,应如何以DDD方式进行处理,我想知道它是否会创建一个新的有界上下文

,其中包含一个您始终希望拥有技术id的实体,即一个不可变且由您的应用程序控制的id(UUID)属性。自然id
AccountNumber
仅为值对象。基本上,由于技术原因,在你的应用程序中只使用Id,AccountNumber只是聚合的另一个VO/细节

更改帐号格式不应创建新的有界上下文,它只是值对象内部的更改。但是由于变更而产生的所有问题都源于实现,而不是域建模(除非它是一个错误的模型:D)。如果您使用事件源和CQR,相对而言,事情应该足够简单。如果您使用的是恢复状态的ORM,则情况会更复杂


DDD方式意味着您必须理解概念的本质,实际的实现取决于许多事情。

对于一个实体,您总是希望拥有一个技术id,即一个不可变的id(UUID)属性,并且由您的应用程序控制。自然id
AccountNumber
仅为值对象。基本上,由于技术原因,在你的应用程序中只使用Id,AccountNumber只是聚合的另一个VO/细节

更改帐号格式不应创建新的有界上下文,它只是值对象内部的更改。但是由于变更而产生的所有问题都源于实现,而不是域建模(除非它是一个错误的模型:D)。如果您使用事件源和CQR,相对而言,事情应该足够简单。如果您使用的是恢复状态的ORM,则情况会更复杂


DDD方式意味着您必须理解概念的本质,实际实现取决于许多事情。

有界上下文通常有自己的普遍语言和词汇。更改标识符中的位数几乎不需要新的语言。有界上下文通常有自己的通用语言和词汇表。更改标识符中的位数几乎不需要新语言。在哪些方面使用事件源比使用当前持久化状态更容易?在哪些方面使用事件源比使用当前持久化状态更容易?