Как я могу избежать повторения if-else при проверке полей в DTO? - PullRequest
0 голосов
/ 13 марта 2019

Класс StudentDTO, имеющий около 20 строковых атрибутов, и каждый из них должен проверять, является ли он обязательным или нет, основываясь на логике, приведенной ниже в комментариях. Это сделает метод обновления слишком длинным, если он еще. Сообщение об исключении должно изменяться в зависимости от оценки свойства. Этот код использует Java 11.

  // all fields except lastUpdated  are string
    public Student populateStudent(final StudentDTO studentDTO) {
        Student student = new Student();
        boolean dataUpdated = false;
        /*
        If mandatory parameter is:
            1.) null : parameter is not updating
            2.) empty : validate and throw an exception
            3.) blank : validate and throw an exception
         */
        if (isEmptyOrBlank(studentDTO.getName())) {
            handleBadParam("Bad student name");
        } else {
            if (studentDTO.getName() != null) {
                student.setName(studentDTO.getName());
                dataUpdated = true;
            }
        }
        if (isEmptyOrBlank(studentDTO.getBirthday())) {
            handleBadParam("Bad student birthday");
        } else {
            if (studentDTO.getBirthday() != null) {
                student.setBirthday(studentDTO.getBirthday());
                dataUpdated = true;
            }
        }

        // .... 20 other similar if-else statements later ....

        // if atleast one parameter updated then date should update
        if (dataUpdated) {
            student.setLastUpdated(new Date());
        }
        return student;
    }

    private boolean isEmptyOrBlank(String name) {
        return name != null && (name.isEmpty() || isBlank(name));
    }

    private void handleBadParam(String messgae) {
        throw new IllegalArgumentException(messgae);
    }

    private boolean isBlank(String name) {
        return (name.trim().length() == 0);
    }

Ответы [ 2 ]

1 голос
/ 13 марта 2019

Кажется, вы проверяете свой объект.

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

Вы можете создать класс, подобный StudentValidator, поэтому его работа должна проверять только объект Student. Таким образом, вы понимаете первый принцип единоличной ответственности Solid.

А также в этом классе StudentValidator будут методы, для которых вам нужны валидации. И после всех этих реализаций вы можете использовать метод для каждой проверки или вызывать их при необходимости.

Также есть много шаблонов проектирования, чтобы избегать операторов if-else посредством реализации шаблонов. Как шаблон команды, использование перечислений и т. Д.

0 голосов
/ 13 марта 2019

Я бы настоятельно рекомендовал использовать среду Java JSR 303. Bean Validation. Пакеты javax.validation предоставляют разработчикам стандартизированный способ сделать это.Поля, которые должны соответствовать определенным критериям, получают соответствующие аннотации, например, @NotNull, и они затем оцениваются платформой.Естественно, для проверки более конкретных условий существует возможность создания пользовательских аннотаций и валидаторов.

Вы можете обратиться к этому https://dzone.com/articles/bean-validation-made-simple.

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