Класс «Хелпер» - как лучше реализовать - PullRequest
0 голосов
/ 30 января 2019

Например, метод моего класса должен проверять входные значения перед использованием.Предположим, 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 подходах:

  1. проверить значения в методе:

    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.Если это необходимо

Какой подход лучше?Или любой другой подход?

1 Ответ

0 голосов
/ 30 января 2019

Олег, я не уверен, насколько сильно вы застряли при выдаче этого конкретного исключения, но рассматривали ли вы?

  1. FluentValidation (https://www.nuget.org/packages/fluentvalidation)

  2. Кодовые контракты (https://docs.microsoft.com/en-us/dotnet/framework/debug-trace-profile/code-contracts)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...