Например, метод моего класса должен проверять входные значения перед использованием.Предположим, 2 параметра метода:
int start
int count
Мы должны подтвердить, что start
не меньше 0 (должно быть 0 или больше), count
должно быть в диапазоне 0..999.Если эти 2 параметра верны, мы продолжаем выполнять наш метод, в противном случае выдается исключение BillComInvalidRangeException
:
public class BillComInvalidRangeException : Exception
{
const string invalidRangeMessage = "The range is not valid. 'Start' should be greater than 0, 'Count' in range 0..999.";
public BillComInvalidRangeException(int start, int count) : base($"{invalidRangeMessage} Passed 'Start' : {start}, 'Count' : {count}")
{
}
}
Я хочу следовать SRP и создать еще один класс с именем ValidateListRange
.Я могу реализовать это в 3 подходах:
проверить значения в методе:
public bool Validate(int start, int count)
{
return !(start < 0
|| count < 0
|| count > 999);
}
и затем просто использовать:
var validateObject = new ValidateListRange();
if (!validateObject.Validate(start, count))
throw new BillComInvalidRangeException(start, count);
проверка значений в статическом методе:
public static bool Validate(int start, int count)
{
return !(start < 0
|| count < 0
|| count > 999);
}
, затем для использования:
if (!ValidateListRange.Validate(start, count))
throw new BillComInvalidRangeException(start, count);
более короткая запись с тем же функционалом.Тогда наш класс ValidateListRange
- это простой класс Util, который может включать в себя множество методов (проверять, генерировать и т. Д.), Подобных этому, в рамках проекта.
Но с нестатическим классом у нас есть одно огромное преимущество - мы можем работать синтерфейс, а затем передать необходимый объект проверки без изменения исходного кода нашего проекта.Например, в будущем мы должны проверить 9999, а не 999, и мы можем написать новую реализацию класса ValidateListRange.Если это необходимо
Какой подход лучше?Или любой другой подход?