2016-01-22 62 views
0

应用领域驱动设计我阅读了关于事件采购的内容。这节省了一系列事件。数据库的事件表有以下栏目:持久化事件时的身份证复制(事件采购)

EventID, EventDate, AggregateId, EventData 

我能救产品,类别和为了在这个表事件。但是aggregateId可能会被复制。在这种情况下,我将获得订单事件作为产品事件。

如何防止系统ID重复。

回答

0

难道你不能让AggregateID成为类型和id的组合键吗?所以你可以有Product:123456Category:123456?或者你可以添加另一个聚合类型的列,如果这是一个更好的解决方案。

+1

我会添加另一列。 – plalx

4

根据定义,聚合根具有全局唯一标识符。如果您正在进行DDD(并且我认为您自从使用DDD标记问题),并且您使用事件源采集来捕获聚合根的事件流,那么您需要找到确保跨不同聚合类型的唯一性的方法。

您可以生成一个GUID或使用其他人建议的某种组合键。

+0

另请参见:命名的UUID。 – VoiceOfUnreason

0

除了使用客户端生成的GUID之外,我还是建议在表中添加几列。

EventID, EventType, EventDate, AggregateType, AggregateId, MetaData, EventData 

我会添加事件类型和聚合类型的原因有几个。 他们将支持底层类型的重新水合,在表上允许额外的索引,并且表示系统中相当重要的信息。最后,它可能会简化表上的读取查询,避免一些连接。

元数据将允许跟踪用户和/或源事件信息。

即使这增加了信息使之成为可能我会避免使用复合键,坚持与GUID键。

如果您不能使用客户端GUID,那么将EventID上的newsequentialguid()作为主键即可。