Методика использования SOLID Open/Closed Principle с перечислениями и валидацией
Я ищу лучшую технику, чтобы убедиться, что я следую принципу Open/Closed в следующей ситуации.
По сути, я унаследовал некоторый код, который является кошмаром для расширения, поскольку он требует так много модификаций:
public enum Basis {
Basis1,
Basis2
}
public class BenefitA {
public Basis Basis {get;set;}
public int Amount {get;set;}
}
public class BenefitB {
public Basis Basis {get;set;}
public int Amount {get;set;}
}
public class RequestA {
public BenefitA {get;set;}
public int Age {get;set;}
public bool Validate()
{
if (BenefitA.Basis == Basis.Basis1 && Age > 50)
{
return false;
}
else if (BenefitA.Basis == Basis.Basis2 && Age < 50)
{
return false;
}
return true;
}
}
Представьте, что есть еще много преимуществ и много запросов, и мне нужно добавить третье значение в перечисление Basis.
Теперь мне нужно перейти ко всем запросам и написать новую логику для нового значения.
Есть ли лучший способ сделать это?
Спасибо