我有以下方法和接口:
public object ProcessRules(List<IRule> rules)
{
foreach(IRule rule in rules)
{
if(EvaluateExpression(rule.Exp) == true) return rule.Result;
}
//Some error handling here for not hitting any rules
}
public interface IRule
{
Expression Exp;
Object Result;
int Precedence;
}
因为规则具有优先级,所以它们实际上不应该被乱序处理。这导致我(我认为)三个解决方案:
- 在将规则传递给评估器之前对其进行排序。
- 将参数类型更改为强制排序顺序的东西。
- 在评估器中排序。
我喜欢选项 3,因为它始终确保它是有序的,我喜欢选项 1,因为它看起来更有凝聚力。选项 2 似乎是一个很好的折衷方案。
像这种上下文这样的场景是特定的/主观的,还是真的有一个最佳实践可以在这里应用?