代码之家  ›  专栏  ›  技术社区  ›  Chris Barry

C中声誉规则的数据结构(如堆栈溢出)

  •  1
  • Chris Barry  · 技术社区  · 15 年前

    我目前正在建立一个系统,其中将有实体,将有得分,如声誉等。

    我将拥有一个服务,该服务将检查是否触发了某些规则,并在触发时执行某些逻辑。

    以前,当我只需要存储一个ID和一个描述时,我使用say枚举来完成这个操作。

    public enum ShoppingCratCalculation
    {
        PartialCalculation = 1,
        CompleteCalculation =2
    }
    

    但在这种情况下,我想把更多的信息,如对声誉的修改,都放在一个地方。

    我实际上是在问,对于系统中的每个规则,哪种数据结构最适合存储这些信息。

    1. Description = string ("User forgot to write a review")
    2. DB id = int (23)
    3. Rep score modification = int (-5)
    

    也许上点课( Rule )将这些作为属性,然后 list<Rule> ?

    对于这种结构,是否有人有任何最佳实践建议?

    2 回复  |  直到 12 年前
        1
  •  1
  •   tvanfosson    15 年前

    我可能会使用一个类来存储规则数据,但是用于存储它们的数据结构实际上取决于规则的组织方式。你说是这样,但通常是地图 行动 为了名誉。从您的示例中,听起来好像您正在映射 素质 对名誉的影响。在这种情况下,使用相同类型的系统可能不合适。例如,你真的想要一个消极的得分行为的可能性吗——允许这样做,但也许你不希望这样做。毕竟,听起来你的目标是卖东西——你可能想考虑给一个人买东西的负面声誉带来的影响。

    话虽如此,这里有一些事情我会考虑。如果结构是平面的,并且在任何给定时间只能应用一个规则,或者每个规则都是独立的,那么由规则标识符(可能是枚举)键控的字典可能是合适的。如果可以应用多个规则并且它们相互作用,那么您可能希望将它们存储在集合中,并使用来自所有匹配规则的decorator模式构建复合规则。例如,使用已验证的帐户进行购买并撰写评论可能会比使用匿名帐户撰写评论给您带来更多的声誉。如果规则是分层的,也就是说,有一些优先权,那么一个过滤器链(具有中止链的选项)可能更合适。

        2
  •  1
  •   Marek    15 年前

    你可能想看看 production systems . 这些允许您通过执行定义的操作来处理规则和对操作作出反应。