Рубрики
Без рубрики

Улучшите Дизайн Своего Программного Обеспечения с Помощью Шаблона “Проверь И Сделай” 📋

Зачем нужен другой шаблон дизайна? 😠 Выполнение тестов на a является широко распространенной задачей в программном обеспечении… С тегом java, учебник, программирование, программное обеспечение.

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

Давайте представим конвейер проверок, которые объект должен пройти перед сохранением в базе данных. На каждом шаге мы хотим вернуть причину сбоя проверки, если это произойдет. В противном случае мы хотим перейти к следующей проверке.

Давайте напишем функцию для проверки того, что данный пароль 🗝 соответствует определенным критериям. Длина должна составлять от 8 до 14 символов. Должно содержать по крайней мере один символ верхнего регистра и один символ нижнего регистра. Должно быть не менее 2 цифр. Должен содержать по крайней мере один специальный символ.

Давайте сделаем это с помощью Java-кода

public String checkPasswordAndSubmit(String password) {
        // have some logic here perhaps
        int length = password.length();

        if (length < 8) return "Password is under 8 characters";

        if (length > 14) return "Password is above 14 characters";

        if (password.equals(password.toLowerCase())) return "Password must have at least one uppercase letter";

        if (password.equals(password.toUpperCase())) return "Password must have at least one lowercase letter";

        if(password.replaceAll("\\D", "").length() < 2) return "Password must have at least two digits";

        Pattern p = Pattern.compile("[^a-z0-9 ]", Pattern.CASE_INSENSITIVE);
        Matcher m = p.matcher(password);
        if (!m.find()) return "Password must have at least one special character";

        else return "Submitted";
    }

Что в этом было плохого? 🚩

Приведенная выше реализация имеет много недостатков, однако наиболее важными из них являются два: Нарушает принцип единой ответственности, поскольку эта функция выполняет более одной проверки (шесть, если быть точным). Функция CheckPassword И Submit имеет длину около 20 строк, которая может быть короче, если реализована правильно.

Мы добавляем цепочку контрольных функций, каждая из которых проверяет один аспект. Обратите внимание на соглашение об именовании функций check_* И _ где:

  • * – это текущая проверка, которую мы выполняем.
  • ** – это последнее действие, которое мы хотим выполнить. Например checkPassWordLengthAndSubmit checkPassWordCaseSensitivityAndSubmit checkThatTwoDigitsAreGivenAndSubmit checkThatSpecialCharactersAreGivenandsubmit
    public String checkPassword(String password) {
        // have some logic here perhaps
        return checkPasswordLengthAndSubmit(password);
    }

    private String checkPasswordLengthAndSubmit(String password) {
        int length = password.length();

        if (length < 8) return "Password is under 8 characters";

        if (length > 14) return "Password is above 14 characters";

        return checkPassWordCaseSensitivityAndSubmit(password);
    }

    private String checkPassWordCaseSensitivityAndSubmit(String password) {
        if (password.equals(password.toLowerCase())) return "Password must have at least one uppercase letter";

        if (password.equals(password.toUpperCase())) return "Password must have at least one lowercase letter";

        return checkThatTwoDigitsAreGivenAndSubmit(password);
    }

    private String checkThatTwoDigitsAreGivenAndSubmit(String password) {
        if(password.replaceAll("\\D", "").length() < 2) return "Password must have at least two digits";

        return checkThatSpecialCharactersAreGivenAndSubmit(password);
    }

    private String checkThatSpecialCharactersAreGivenAndSubmit(String password) {
        Pattern p = Pattern.compile("[^a-z0-9 ]", Pattern.CASE_INSENSITIVE);
        Matcher m = p.matcher(password);
        if (!m.find()) return "Password must have at least one special character";

        return submit(password);
    }

    private String submit(String password) {
        return "Submitted";
    }

Итак, стоит ли вам использовать этот шаблон? Как?

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

Код на GitHub 🖊

Оригинал: “https://dev.to/jarjanazy/improve-your-software-design-with-the-checkanddo-pattern-28mp”