Я не уверен, есть ли здесь шаблон, который следует использовать, но вот ситуация:
У меня есть несколько конкретных классов, которые реализуют интерфейс:
public interface IPerformAction
{
bool ShouldPerformAction();
void PerformAction();
}
У меня есть другой класс, который проверяет входные данные, чтобы определить, следует ли выполнять ShouldPerformAction. Суть в том, что новые чеки добавляются довольно часто. Интерфейс для класса проверки определяется следующим образом:
public interface IShouldPerformActionChecker
{
bool CheckA(string a);
bool CheckB(string b);
bool CheckC(int c);
// etc...
}
Наконец, в настоящее время у меня есть конкретные классы, вызывающие каждый из методов проверки с данными, специфичными для этого конкретного класса:
public class ConcreteClass : IPerformAction
{
public IShouldPerformActionCheck ShouldPerformActionChecker { get; set; }
public string Property1 { get; set; }
public string Property2 { get; set; }
public int Property3 { get; set; }
public bool ShouldPerformAction()
{
return
ShouldPerformActionChecker.CheckA(this.Property1) ||
ShouldPerformActionChecker.CheckB(this.Property2) ||
ShouldPerformActionChecker.CheckC(this.Property3);
}
public void PerformAction()
{
// do something class specific
}
}
Теперь каждый раз, когда я добавляю новую проверку, я должен рефакторинг конкретных классов, чтобы включить новую проверку. Каждый конкретный класс передает различные свойства методу проверки, поэтому подклассы конкретных классов не являются опцией. Любые идеи о том, как это может быть реализовано в более чистой форме?