По наводке Романа Ворушина почитал пост Дика Липтона о том, что в проекировании систем должны закладываться безопасные умолчания. И мне вспомнилась похожая штука из истории Джанго.
Когда-то давно у модели пользователя был метод is_anonymous(), который предполагалось проверять в шаблонах для определения, что показывать незалогиненному пользователю:
{% if user.is_anonymous %} Login... {% else %} Hi, {{ user }} {% endif %}
А потом Гэри Вилсон справедливо заметил, что это может быть не очень безопасно: если в шаблоне не будет перменной user или человек ошибётся в написании user.is_anonymous, то по умолчанию отработает та часть шаблона, которая показывается залогиненному юзеру.
И с тех пор у юзера вместо is_anonymous появился обратный метод — is_authenticated, условие поменялось на обратное, и теперь в случае ошибок шаблон не вываливает всем подряд залогиновую информацию.
Комментарии: 9
9.02.10 18:36
А ещё есть опасные умолчания. Это когда ты полагаешься на действие по-умолчанию, не переопределяя его, а разработчики фреймворка/библиотеки и т.д. изменяют это действие/поведение на новое.
9.02.10 18:36
Еще пример навскидку - разрешительная система прав Unix (вместо запретительной, где по умолчанию все разрешено).
Дик Липтон привел очень удачные яркие примеры с поездами и лифтом - больше шансов помнить об этом принципе при проектировании систем.
10.02.10 10:50
Я на подобные грабли наступил довольно быстро после начала разработки. Было
И после первой же опечатки я огреб труднодиагностируемый глюк. После этого сделал
и стараюсь этот урок всегда держать в голове
10.02.10 12:59
Во-во, и в джанге есть подобное западло -
form.is_valid(). Стоит забыть скобки, и иф проходит удачно. :(10.02.10 13:20
Кстати, да... Жаль, теперь просто не поменяешь из-за обратной совместимости.
10.02.10 13:42
Но ведь никто не запрещает использовать оба варианта... просто "неправильный" будет deprecated
18.02.10 18:28
Не кажется ли вам, что это проблема плохих языков, которые не обругают вас, когда вы используете не определенный ранее метод или переменную? =)
18.02.10 21:44
"Плохих языков"... Вы правда надеетесь на адекватный ответ на явный троллинг? "You must be new here..." ©
20.02.10 15:52
Плохой язык тот - с которым лично Вам некомфортно. Все остальные языки хорошие =)