Можно ли использовать этот шаблон для проверки значений? - PullRequest
1 голос
/ 03 июля 2011

Для моих классов, у которых есть методы со схожей логикой проверки ввода (например, пользовательский многомерный массив, который имеет много методов, каждый из которых проверяет, находятся ли данные координаты в пределах границ массива), я создаю отдельный частная проверка, которая генерирует исключения времени выполнения, а также открытая проверка, которая просто возвращает логическое значение, указывающее, является ли переменная приемлемой для методов этого класса. Вот пример:

public class Foo {



    public void doStuff(Variable v) {

        checkVariableUnsafe(v);
        ... // do stuff
    }



    private void checkVariableUnsafe(Variable v) throws InvalidVariableException {...}



    public boolean checkVariable(Variable v) {
        try {
            checkVariableUnsafe(v);
            return true;
        } catch (InvalidVariableException e) {
            return false;
        }
    }
}

Можно ли его использовать или есть какие-то недостатки, которые я не вижу? Какой шаблон обычно используется в таких ситуациях?

Ответы [ 4 ]

3 голосов
/ 03 июля 2011

Не только хорошая идея использовать один и тот же код для прогнозирования достоверности и фактической проверки, это правильная идея only . И поскольку первая заповедь - Не повторяйте себя! , конечно, вы должны извлечь эту проверку в собственный метод. Так что это именно то, что я обычно делаю.

2 голосов
/ 03 июля 2011

Часто рекомендуется избегать использования исключений для нормального выполнения программы. Без обсуждения этой проблемы здесь, если вы хотите последовать этому совету, вы можете поместить логику, которая фактически выполняет проверку, в общедоступный метод checkVariable, и иметь частный вызов checkVariableUnsafe метода checkVariable и выдать исключение, если оно возвращает false.

Я не думаю, что в вашем вопросе достаточно контекста, чтобы однозначно прокомментировать соответствие API, который вы создали, но я не вижу в этом ничего по сути неправильного.

1 голос
/ 03 июля 2011

Это очень хорошая практика.Я бы просто использовал стандартный IllegalArgumentException, а не пользовательский.

0 голосов
/ 03 июля 2011

Я думаю, что это излишне сложно.Если вы просто проверяете входящие параметры, передаваемые методу, я просто программирую в проверках, выкидываю IllegalArgumentException в случае сбоя и продолжаю.Я бы восстал против любого, кто навязал мне такой подробный, якобы шаблон .

Я бы предпочел что-то вроде API привязки и валидации Spring, но это не то, что у вас здесь есть.Ваша предложенная сложность, кажется, ничего не покупает.

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