Я хочу создать простую систему проверки для определенного класса объектов, в основном
public interface IMyClassRule {
bool IsValid(MyClass obj, Context someAdditionalData)
}
Список правил автоматически обнаруживается с использованием инфраструктуры DI и не фиксируется заранее.
Допустим, у меня есть VeryGeneralDefaultRuleAboutAllObjects: IMyClassRule
и SpecificCaseWhenGeneralRuleDoesNotApply: IMyClassRule
. Как я могу справиться с этим решением обычным способом (в основном позволяя переопределить любое правило любым другим правилом в определенных случаях)?
Решения, которые я рассмотрел:
Числовой приоритет для правил или результатов правил
Pro : Просто понять и реализовать.
Contra : Мне нужно знать / угадывать приоритет исходного правила.Не очевидно, какой приоритет первый (1 или 1000)? Требуется результат правила «безразлично» для ситуации, когда конкретный случай неприменим.
Приоритет на основе типа (в основном .Before
)
Pro : конкретно объявляет, чего вы хотите достичь.
Contra : Требуется явная ссылка на исходное правило. Логика заказа будет сложной. Требуется результат правила «безразлично» для ситуации, когда конкретный случай неприменим.
Есть ли другие / лучшие варианты?