以下规则设计的其他解决方案是什么?

And*_*kin 7 c# rules

我想基本上为某些类对象创建一个简单的验证系统

public interface IMyClassRule {
    bool IsValid(MyClass obj, Context someAdditionalData)
}
Run Code Online (Sandbox Code Playgroud)

使用DI框架自动发现规则列表,而不是事先修复.

假设我有一个VeryGeneralDefaultRuleAboutAllObjects : IMyClassRuleSpecificCaseWhenGeneralRuleDoesNotApply : IMyClassRule.如何以通用方式处理此解决方案(在某些情况下基本上允许通过任何其他规则覆盖任何规则)?

解决方案我考虑过

  1. 规则或规则结果的数字优先级

    专业:易于理解和实施.
    反对:我需要知道/猜测原规则的优先级.不明显哪个优先(1或1000)?对于不适用特定情况的情况,需要一些"不关心"规则结果.

  2. 基于类型的优先级(基本.Before<VeryGeneralRule>)

    :具体说明你想要实现的目标.
    Contra:需要明确引用原始规则.订购逻辑将很复杂.对于不适用特定情况的情况,需要一些"不关心"规则结果.

还有其他/更好的选择吗?

Chr*_*ain 0

如何添加将一些条件注入规则实例(例如接口实例)的功能IRuleApplicability。您可以将其与类似于 #2 的内容结合起来,并使用所有规则的基类在应用规则之前检查适用性。