【问题标题】:DDD: Referencing non-roots. Alternative?DDD:引用非根。选择?
【发布时间】:2016-10-13 14:52:00
【问题描述】:

我目前正在开发一个应用程序,其中管理 FacilitiesFacility ItemsAssessmentsFindings(这是一个带有 Windows 管理应用程序的移动应用程序,我只描述了一小部分)。

目前它是用一个贫血模型实现的非常 CRUD,我想应用 DDD 的一些想法来使我的模型更丰富/更健壮并强制执行一些不变量。

我喜欢实施的新要求是通过扫描附在它们上的Tag 来获取有关设施项目/发现的信息。

Team 拥有一组预定义的标签。目前这些是打印在磁性标签上的一些二维码,但当然也可以使用 nfc 标签。 当团队成员进行评估时,每当他发现发现时,他就会在“目标”上贴上标签并对其进行扫描。稍后其他团队成员可以扫描现有标签并获取有关发现的信息。如果某个结果不再相关,则该标签可能会重复用于其他结果。

这些是我的(简单)要求:

  • 标签可以分配给设施或结果。
  • 如果重新分配标签,旧的分配将不再有效。
  • 可以使用标签查询设施项目/发现。

简单/明显的解决方案是直接从发现/设施项目中引用标签。但我认为这有一些缺点:

  1. 可能需要在一个事务中更改两个 AR,例如如果该标签以前用于调查结果,现在用于设施项目
  2. 我认为设施项目一定对标签一无所知。这不是它的真正属性,是吗?
  3. 我正在使用乐观锁定并更改“分配”也会更改查找/设施项目和拥有的 AR。我想这可能会导致并发问题。

我想我可以使用某种“标签分配”实体来引用标签和设施项目/发现。使用此解决方案,我可以轻松更改分配。这有意义吗? 但是这种解决方案至少存在一个问题:在 DDD 中“不允许”从标签中引用设施项目/发现(因为应该只引用 AR)。

我想知道有人会如何用 DDD 建模?有什么想法吗?谢谢!

【问题讨论】:

    标签: c# oop domain-driven-design


    【解决方案1】:

    我想我可以使用某种“标签分配”实体来引用标签和设施项目/发现。使用此解决方案,我可以轻松更改分配。这有意义吗?但是这种解决方案至少存在一个问题:在 DDD 中“不允许”从标签中引用设施项目/发现(因为应该只引用 AR)。

    我想知道有人会如何用 DDD 建模?有什么想法吗?

    您描述的问题有一个特征,在您设计解决方案时理解这一点至关重要:模型不是记录本

    目前这些是一些打印在磁性标签上的二维码,但当然也可以使用 nfc 标签。当团队成员进行评估时,每当他发现发现时,他都会在“目标”上贴上标签并对其进行扫描

    请注意,这些活动是在现实世界中发生的;您的域模型没有获得否决权。

    要注意的第二件事是,虽然Tag 可能是现实世界中的实体,但您实际上并不关心。您的扫描仪会反射标签上的光线,分析反射,推断出二维码,然后发送该二维码的表示。 (您的模型图片已经表明您理解这一点)。

    如果某个发现不再相关,则该标签可能会重复用于其他发现。

    这听起来您的模型需要了解时间。现实世界中的人们希望能够告诉您的模型“截至 {date:...},Tag{qrcode:...} 已分配给 Finding{id:...}”

    团队拥有一组预定义的标签。

    您需要认真思考所有权在您的设计中的真正含义。问题描述中没有任何内容表明团队 AR 负责维护关于标签状态的业务不变性。如果一个团队被重组不存在,它的所有标签会“消失”吗?应该不会吧。

    我的猜测是所有权更像是分配“截至 {date:...},Team{id:...} 负责 Tag{qrcode:...}”;再一次 - 你需要特别注意“谁来决定?”该模型?还是现实世界?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-04
      • 1970-01-01
      • 2020-10-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多