如何在 DDD 架构中的书籍、视频、照片等不同资源之间创建通用关系 table?
How do I create a universal relationships table between distinct resources like books, video, photos in DDD architecture?
我想知道如何在域设计项目(使用 NodeJS、NestJS)中创建诸如非规范化通用关系之类的东西 table。这些关系类似于社交媒体中的 'like',可以应用于不同的项目类型,可能会跨界上下文,但不需要了解上下文的域和内部逻辑。
在数据库术语中,这是概念,但通常不是好的做法:
Table: Universal_Relationships
Rel_ID | Res_A_ID | Res_A_Type | Res_B_ID | Res_B_Type
12 23 2 344 6
Table: Resource_Types
Type_ID | Type_Name
2 Map_Location
6 Research_Reference
8 Photo
10 Artwork
11 Video
12 Note
[…]
Table: Map_Locations
Place_ID | Marker_Title | Coord_X (or Lat) | Coord_Y (or Long) | Description
2 Eugene 44.064319 -123.0825664 City
Table: Research_Reference
Ref_ID | Title | Publisher | Abstract
6 Tourist Guide Collins Guide to ...
非常感谢任何帮助,谢谢
我建议将关系建模为聚合(不同类型的关系可能是不同的聚合,或者您可能只是 关系 是聚合);由于关系是不同限界上下文中聚合之间的事物之间的关系,因此这可能是它自己的限界上下文。
聚合基本上只是持有对相关聚合根的引用(通过 ID,而不是编程语言意义上的引用)(如果关系在可以关联的方面是自由形式的,这些 ID 将还对聚合类型进行编码)。
值得注意的是,当我们跨越有界上下文时(通常可以想象,它们可以在彼此之间的网络距离内开始操作),某种程度的最终一致性很可能会发挥作用:我建议不要尝试对关系强制执行强外键样式约束,除非你绝对确定你永远不会 运行 有界上下文彼此之间的网络距离(并明确表示这种关系有界上下文将阻止它从正在完成)。
我想知道如何在域设计项目(使用 NodeJS、NestJS)中创建诸如非规范化通用关系之类的东西 table。这些关系类似于社交媒体中的 'like',可以应用于不同的项目类型,可能会跨界上下文,但不需要了解上下文的域和内部逻辑。
在数据库术语中,这是概念,但通常不是好的做法:
Table: Universal_Relationships
Rel_ID | Res_A_ID | Res_A_Type | Res_B_ID | Res_B_Type
12 23 2 344 6
Table: Resource_Types
Type_ID | Type_Name
2 Map_Location
6 Research_Reference
8 Photo
10 Artwork
11 Video
12 Note
[…]
Table: Map_Locations
Place_ID | Marker_Title | Coord_X (or Lat) | Coord_Y (or Long) | Description
2 Eugene 44.064319 -123.0825664 City
Table: Research_Reference
Ref_ID | Title | Publisher | Abstract
6 Tourist Guide Collins Guide to ...
非常感谢任何帮助,谢谢
我建议将关系建模为聚合(不同类型的关系可能是不同的聚合,或者您可能只是 关系 是聚合);由于关系是不同限界上下文中聚合之间的事物之间的关系,因此这可能是它自己的限界上下文。
聚合基本上只是持有对相关聚合根的引用(通过 ID,而不是编程语言意义上的引用)(如果关系在可以关联的方面是自由形式的,这些 ID 将还对聚合类型进行编码)。
值得注意的是,当我们跨越有界上下文时(通常可以想象,它们可以在彼此之间的网络距离内开始操作),某种程度的最终一致性很可能会发挥作用:我建议不要尝试对关系强制执行强外键样式约束,除非你绝对确定你永远不会 运行 有界上下文彼此之间的网络距离(并明确表示这种关系有界上下文将阻止它从正在完成)。