Каковы другие решения для следующего дизайна правил?

Я хочу создать простую систему проверки для определенного класса объектов, в основном

public interface IMyClassRule {
    bool IsValid(MyClass obj, Context someAdditionalData)
}

Список правил автоматически обнаруживается с использованием инфраструктуры DI и не фиксируется заранее.

Допустим, у меня есть VeryGeneralDefaultRuleAboutAllObjects: IMyClassRule и SpecificCaseWhenGeneralRuleDoesNotApply: IMyClassRule . Как я могу справиться с этим решением обычным способом (в основном позволяя переопределить любое правило любым другим правилом в определенных случаях)?

Решения, которые я рассмотрел:

  1. Числовой приоритет для правил или результатов правил

    Pro : Просто понять и реализовать.
    Contra : Мне нужно знать / угадывать приоритет исходного правила.Не очевидно, какой приоритет первый (1 или 1000)? Требуется результат правила «безразлично» для ситуации, когда конкретный случай неприменим.

  2. Приоритет на основе типа (в основном .Before )

    Pro : конкретно объявляет, чего вы хотите достичь.
    Contra : Требуется явная ссылка на исходное правило. Логика заказа будет сложной. Требуется результат правила «безразлично» для ситуации, когда конкретный случай неприменим.

Есть ли другие / лучшие варианты?

7
задан CodesInChaos 9 January 2012 в 22:59
поделиться