2

让我们想象一个社交网络,其中每个用户都可以通过委托等方式从其他人那里获得声誉。因此,当 A 委托给 B 时,A 和 B 最初的声誉为 1,那么 A 有 0,B 有 2。然后 B 可以委托给 C,依此类推。

此外 - 延迟有其范围,并且范围可以嵌套。因此,A 可以在所有主题、或仅编程或仅 c# 上委托声誉。他可以将编程委派给 B,但将 C# 委派给 C。这意味着最终声誉因给定范围而异。

所以我们得到了一种有向图结构(可能是一棵树,但还不清楚循环是什么),我们需要遍历它来计算声誉。

我正在尝试使用 DDD 原则对其进行建模,但我不确定这里的聚合是什么。

我想委托树/图是一个候选者,因为聚合是一个一致性单位。然而,这意味着聚合将非常大。范围的事情使它更加复杂,因为它使聚合边界不清楚。C# 上的委托是编程委托的一部分吗?

用户呢?作为一个聚合,它必须存储来自/来自其他用户的引用(委托)。再次 - 给定用户属于哪个聚合?

另一个问题是如何有效地计算声誉。我猜在这种情况下,图形数据库比关系数据库更合适,但这是唯一好的答案吗?

4

1 回答 1

1

根聚合用于强制执行不变量。你告诉我们的委托规则是一组不变量。不知道您可能需要哪些其他不变量,很难说出合适的根聚合将是什么,但是在我看来,简单地按照您提供的“用户”似乎是一个完美的根聚合,可以将您的所有委托规则作为不变量强制执行。一个用户可能有一个或多个委托范围,它们本身可能是根聚合。根据委托规则,用户可以委托给另一个用户,而另一个用户又可以根据这些相同的规则进行委托。这允许您强制执行所有不变量,并且根据 DDD 规则存储对(其他)用户的引用没有问题。

不断询问如何始终如一地执行特定于域的规则,您将找到您的根聚合。

关于您的另一个问题:图形数据库似乎比关系数据库更好,但是很难用有限的信息来判断。我建议您单独发布此问题,并包括您对关系数据库与图形数据库的考虑。

于 2013-06-16T21:00:20.957 回答