逐级实施回退

c#

我有一个ScoreStrategy描述如何计算测验分数的课程:

public class ScoreStrategy
{
    public int Id { get; set; }

    public int QuizId { get; set; }

    [Required]
    public Quiz Quiz { get; set; }

    public decimal Correct { get; set; }

    public decimal Incorrect { get; set; }

    public decimal Unattempted { get; set; }
}

三个属性CorrectIncorrectUnattempted描述要为响应分配多少点。这些点也可以是负的。评分策略适用于测验中的所有问题,因此ScoreStrategy每个测验只能有一个。我有两个子类:

public class DifficultyScoreStrategy : ScoreStrategy
{  
    public QuestionDifficulty Difficulty { get; set; }
}

public class QuestionScoreStrategy : ScoreStrategy
{ 
     [Required]
     public Question Question { get; set; }
}

我的问题有三个难度级别(Easy, Medium, Hard;QuestionDifficulty是一个枚举)。该DifficultyScoreStrategy指定如果的具体困难需要问题点进行不同的分配。这将覆盖ScoreStrategy适用于整个测验的基础。每个难度级别可以有一个实例。

第三,我有一个QuestionScoreStrategy课程,指定是否必须以不同的方式授予特定问题的分数。这将覆盖测验范围ScoreStrategy和难度范围DifficultyStrategy。每个问题可以有一个实例。

在评估测验的反应时,我想实现一个逐级回退机制

对于每个问题:

  • 检查问题是否存在QuestionScoreStrategy,如果找到则返回策略。
  • 如果没有,则回退DifficultyScoreStrategy并检查是否存在针对所评估问题的难度级别的策略,如果找到策略则返回该策略。
  • 如果没有,回退到测验范围ScoreStrategy并检查是否存在,如果存在则返回它,
  • 如果ScoreStrategy两者都没有,请使用默认值{ Correct = 1, Incorrect = 0, Unattempted = 0 }(如果我也可以将其设置为可配置,那就太棒了,就像 .NET 的优雅方式:
options => {
    options.UseFallbackStrategy(
        correct: 1, 
        incorrect: 0, 
        unattempted: 0
    );
} 

)。

概括

我已将上述信息汇总在一个表格中:

策略类型 优先事项 每个测验的最大实例数
QuestionScoreStrategy 第一名(最高) 测验中有多少问题
DifficultyScoreStrategy 第二 4、每个难度级别一个
ScoreStrategy 第三名 只有一个
回退策略
(默认{ Correct = 1, Incorrect = 0, Unattempted = 0}
第四名(最低) 为整个应用程序配置。由所有测验共享
以上是逐级实施回退的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>