让我们想象一个社交网络,每个用户都可以通过委托等方式获得其他用户的声誉。因此,当A代表B时,A和B最初的声誉为1,则A为0,B为2。 然后B可以委托给C等等。
此外 - 爆燃有其范围,范围可以嵌套。因此,A可以将声誉委托给所有主题,或仅委托编程,或仅委托c#。并且他可以将编程委托给B,但是将C#委托给C.这意味着最终的声誉会根据给定的范围而变化。
所以我们得到了一种有向图形结构(可能是一棵树,但还不清楚周期是什么),我们需要遍历这些结构来计算声誉。
我正在尝试使用DDD原则对其进行建模,我不确定这里的聚合是什么。
我认为委托树/图是候选者,因为聚合是一致性的单位。但是,这意味着聚合将非常大。范围之物使其更加复杂化,因为它使聚合边界不清晰。 C#上的代表团是代表团在编程方面的聚合的一部分吗?
用户怎么样?作为聚合,它必须存储与其他用户的引用(委托)。再次 - 聚合给定用户属于哪个?
另一个问题是如何有效地计算声誉。我想在这种情况下图表数据库比关系更合适,但这是唯一的好答案吗?
答案 0 :(得分:1)
根聚合in旨在强制执行不变量。你告诉我们的授权规则是一组不变量。不知道你可能需要什么其他不变量很难说出合适的根聚合是什么,但只是按照你所呈现的“用户”来看,在我看来是一个完美的根聚合,可以将所有的委托规则强制执行为不变量。用户可以具有一个或多个委托范围,这些范围本身可以是根聚合。根据授权规则,用户可以委托给另一个用户,该用户可以依据这些相同的规则进行委托。这允许您强制执行所有不变量,并且在DDD规则下存储对(其他)用户的引用没有问题。
继续询问如何一致地执行特定于域的规则,您将找到根聚合。
在你的单独问题上:图形数据库似乎比关系数据库更好,但很难用有限的信息来判断。我建议您单独发布此问题,并包括您对关系数据库与图表数据库的注意事项。