C# 处理前检查所有条件
背景: 我正在建立一个系统,根据学生的属性和导师的接受程度为大学生指派学术顾问。现在我想检查一下,在我开始处理学生并将更改提交到CRM和Active Directory之前,是否可以为每个可能的学生分配一名顾问。大约有15000条记录,所以除非所有学生都有导师,否则我不想提交更改 我的当前系统有一个“AdvisorGroup”对象来保存“AdvisorRules”列表。我的“AdvisorRules”对象是从CRM填充的:C# 处理前检查所有条件,c#,code-coverage,crm,rules,C#,Code Coverage,Crm,Rules,背景: 我正在建立一个系统,根据学生的属性和导师的接受程度为大学生指派学术顾问。现在我想检查一下,在我开始处理学生并将更改提交到CRM和Active Directory之前,是否可以为每个可能的学生分配一名顾问。大约有15000条记录,所以除非所有学生都有导师,否则我不想提交更改 我的当前系统有一个“AdvisorGroup”对象来保存“AdvisorRules”列表。我的“AdvisorRules”对象是从CRM填充的: class AdvisorRule { public Advis
class AdvisorRule
{
public AdvisorCondition Condition { get; set; }
public AdvisorField Field { get; set; }
public String Value { get; set; }
}
建议条件
可以小于等于、大于等于或等于AdivsorField
可以是学分(每位导师将接受多少学分)、国际学分(如果导师接受有意的学生)、荣誉(如果导师是否接受荣誉学生)和姓氏(导师将接受的姓氏)
“值”是与“AdvisorField”进行比较的目标。例如,AdvisorGroup中的AdvisorURL列表可以包含以下规则:
问题: 在我开始处理之前,是否有办法确保每个可能的学生都会被指派一名导师?我试图在我的编码中不太明确。我曾想过类似的事情,但如果我能找到更好的方法,我愿意重新设计:
private bool checkRuleCoverage()
{
//somehow generate list of possible scenarios here
foreach (possible scenario in list of possible scenarios)
{
bool covered = isCovered(possible scenario);
if(!covered) {throw error and return}
}
}
private bool isCovered(List<AdvisorGroup> adGroups, possibleScenario ps)
{
foreach (AdvisorGroup advisor in adGroups)
{
foreach (AdvisorRule rule in advisor.rules)
{
if(advisor.rules == ps)
return true;
}
}
return false;
}
private bool checkRuleCoverage()
{
//以某种方式在此处生成可能的场景列表
foreach(可能场景列表中的可能场景)
{
bool覆盖=发现(可能情况);
如果(!covered){抛出错误并返回}
}
}
发现了私有对象(列出adGroups、可能的ESCENARIO ps)
{
foreach(adGroups中的AdvisorGroup advisor)
{
foreach(advisorrules中的AdvisorRule规则)
{
如果(advisor.rules==ps)
返回true;
}
}
返回false;
}
如果您的所有学生记录都在数据库中,那么解决方案就是使用带有适当索引的集合逻辑来获得答案。例如,您可以编写自己的解决方案,以便按照advisor规则适用的每个可能值对学生团体进行排序
然后,在不迭代的情况下(尽管您已经迭代了排序),您可以找到某列上x以下或y以上的所有学生,然后将其与另一个统计上的范围之外的学生进行比较,依此类推。毛47的评论表明,任何学生在所有数据范围之外都是不可取的
当然,在用C语言编写代码的过程中,您可以迭代advisor规则,找到范围的值,并将其应用到SQLServer或MySQL上的select或任何基于集合的DB中的where子句
当然,这种粗略的检查忽略了部分规则集的可能性,即一名学生超出了除1条顾问规则以外的所有规则的范围,而这1条规则是不够的,因为顾问还有其他要求。为了解决这个问题,您必须有多个advisor规则集范围,或者更确切地说,在最坏的情况下,您将迭代所有advisor规则。只要学生在规则属性上的分数被正确索引,在DB中这样做可能仍然可以。没有人会读你的entrie帖子。要精确,才能得到精确的答案;博士旁注:请避免使用“感谢信”,请随时讨论。另外,请解释您对foreach有什么问题,以及为什么您希望它不会按顺序遍历每个项目。我编辑了这个问题,我的问题不是遍历所有顾问组中的所有规则,这是为了找到一种方法来确保规则中没有漏洞,并且在我开始处理之前,每个学生都会被指派一名顾问。可以指派一名顾问的学生人数有限制吗?如果没有,你只需要检查没有学生不能被分配到任何可能的顾问。