gpt4 book ai didi

oop - DDD : Modeling M:N relation between two roots where the relation itself carries semantic meaning

转载 作者:行者123 更新时间:2023-12-04 07:09:04 24 4
gpt4 key购买 nike

更新 编辑以反射(reflect)下面 Chris Holmes 要求的澄清。最初我将终端称为站点,但对其进行了更改以更好地反射(reflect)我的实际域。

本质上,我认为这是一个关于对两个根实体之间的多对多关系建模的问题,其中关系本身带有一些语义。

在我的域中

  • 您可以将终端视为我们公司的分支机构
  • 一个终端可以与任意数量的客户建立关系
  • 一个客户可以与任意数量的终端建立关系(标准多对多)
  • 客户\终端关系意味着客户可以潜在地将产品存储在终端
  • 可以启用\禁用此关系。被禁用只是意味着您暂时不允许存储产品,因此禁用关系与根本没有关系不同。
  • 一个客户可以有多个办公室
  • 与客户(启用或未启用)有关系的终端必须为该客户提供一个默认办公室,以便与他们通信
  • 有一些默认设置适用于客户和终端之间的所有交易,这些设置在终端-客户关系级别

  • 我觉得我这里的对象很清楚, 终端 , 客户 , 办公室 , 和 终端客户关系 (因为有专门存储有关关系的信息,例如是否启用、默认办公室、广告默认设置)。通过多次重构,我确定终端和客户都应该是聚合根。这给我留下了如何设计我的 TerminalCustomerRelationship 对象以将两者联系起来的问题。

    我想我可以使从 Terminal 到 TerminalCustomerRelationship 的遍历单向指向关系,但我不知道如何断开与客户关系的关系,尤其是因为它需要包含对与顾客。

    我是这个东西的新手,虽然大部分 DDD 都很有意义,但我感到困惑,需要一个全新的观点。有人可以就如何处理这种情况给我意见吗?

    请注意,我说的是关系而不是关系。在我目前的观点中,它应该成为一个对象,就像婚姻将成为婚礼教堂申请中的对象一样。它最明显的目的是将两个对象联系起来,但它还有其他理所当然地属于它的属性。

    最佳答案

    根据您的描述,您肯定需要一个“ TerminalCustomerRelationship ”实体来跟踪关联信息。我也会转换' 已启用 ' 标记为带有时间戳的第一类“事件”实体 - 这使您能够保存状态更改的历史记录(更真实地了解域中正在发生的事情。)

    这是一个 sample application (在 VS2008 中)可以解决您的问题。您可以调整/测试代码,直到关系有意义。运行“bin/debug/TerminalSampleApp.exe”并右键单击“Terminal->Create Example”开始。

    如果您觉得它有用,请告诉我。

    关于oop - DDD : Modeling M:N relation between two roots where the relation itself carries semantic meaning,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/654586/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com