DDD:引用非根。另类?

时间:2016-10-13 14:52:01

标签: c# oop domain-driven-design

我目前正在处理一个应用,其中Facilities Facility ItemsAssessments Findings被管理(这是一个带有Windows管理应用的移动应用,我只描述了它的一小部分。)

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

我想要实施的新要求是通过扫描附加到它们的Tag来获取有关设施项目/结果的信息。

Simplified Model

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

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

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

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

  1. 可能需要在一次交易中更改两个AR,例如如果标签以前用于查找并且现在用于设施项目
  2. 我认为设施项目一定不能了解标签。它不是真正的属性,是吗?
  3. 我正在使用乐观锁定并且更改“分配”也会更改查找/设施项目和拥有的AR。我想这可能会导致并发问题。
  4. 我认为我可以使用某种“标记分配”实体来引用标记和设施项目/查找。使用此解决方案,我可以轻松更改分配。这有意义吗? 但是这个解决方案至少存在一个问题:在DDD中对标签的设施项目/发现的引用是“不允许的”(因为只应引用AR)。

    我想知道有人会用DDD模拟这个吗?有什么想法吗?谢谢!

1 个答案:

答案 0 :(得分:0)

  

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

     

我想知道有人会用DDD模拟这个吗?有什么想法吗?

您描述的问题有一个在设计解决方案时理解至关重要的功能:该模型不是记录簿

  

目前这些是在磁性标签上印刷的一些qr代码,但当然也可以使用nfc标签。当一个团队成员进行评估时,无论何时他确定一个发现,他都会在“目标”上标记并扫描它

请注意,这些活动正在现实世界中进行;你的域名模型没有否决权。

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

  

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

这听起来像你的模特需要理解时间。现实世界中的人们希望能够告诉您的模型“从{date:...}开始,Tag {qrcode:...}已被分配到Finding {id:...}”

  

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

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

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

相关问题