Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Избавьтесь от побочных эффектов



Побочные эффекты суть ложь. Ваша функция обещает делать что-то одно, но де­лает что-то другое, скрытое от пользователя. Иногда она вносит неожиданные из­менения в переменные своего класса — скажем, присваивает им значения параме­тров, переданных функции, или глобальных переменных системы.

Для примера возьмем безвредную на первый взгляд функцию из листинга 3.6. Функция использует стандартный алгоритм для проверки пары «имя пользова­теля/пароль». Она возвращает true в случае совпадения или false при возник­новении проблем. Но у функции также имеется побочный эффект. Сможете ли вы обнаружить его?

Листинг 3.6. UserValidator.java

public class UserValidator {

private Cryptographer cryptographer;

public boolean checkPassword(String userName, String password)

{

User user = UserGateway.findByName(userName);

if (user!= User.NULL) {

String codedPhrase = user.getPhraseEncodedByPasswordO;

String phrase = cryptographer.decrypt(codedPhrase. password);

if ("Valid Password".equals(phrase)) {

Session.initialize();

return true;

}

}

return false;

}

}

Разумеется, побочным эффектом является вызов Session.initialize(). Имя checkPassword сообщает, что функция проверяет пароль. Оно ничего не говорит о том, что функция инициализирует сеанс. Таким образом, тот, кто поверит имени функции, рискует потерять текущие сеансовые данные, когда он решит проверить данные пользователя.

Побочный эффект создает временную привязку. А именно, функция checkPassword может вызываться только в определенные моменты времени (когда инициали­зация сеанса может быть выполнена безопасно). Несвоевременный вызов может привести к непреднамеренной потере сеансовых данных. Временные привязки создают массу проблем, особенно когда они прячутся в побочных эффектах. Если без временной привязки не обойтись, этот факт должен быть четко оговорен в имени функции. В нашем примере функцию можно было бы переименовать в checkPasswordAndlnitial izeSession, хотя это безусловно нарушает правило «одной операции».


7. Комментарии. Основные правила написания хороших комментариев. Комментарии TODO.





Дата публикования: 2015-01-26; Прочитано: 168 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.006 с)...