суббота, 1 января 2011 г.

Не используйте глобальное состояние для управления локальной проблемой

Это перевод Don't use global state to manage a local problem. Автор: Реймонд Чен.

Мы видели несколько примеров, когда люди используют глобальное состояние для решения локальной проблемы. К примеру, люди, которые используют функцию LockWindowUpdate для блокировки изменений в окне, переключают глобальную настройку, чтобы узнать её значение, или изменяют временную зону для вычислений времени. К этому списку я добавлю программу, которая решила, что если во время установки программы вы не хотите какую-то возможность, то вы не хотите этой возможности ни в какой другой программе.

Первый сервис пак Windows XP добавил в систему апплет панели управления Set Program Access and Defaults. Среди прочих вещей, мультимедийные проигрыватели могли регистрировать себя здесь, чтобы дать пользователю выбрать одного из них как умалчиваемый проигрыватель, включить доступ к проигрывателю или закрыть доступ к нему. Руководство и рекомендации были таковы, что программам рекомендовалось в ответ на команду закрытия доступа удалять их точки входа в интерфейс (вроде ярлыков на меню Пуск и значки уведомления), отключить автопроигрывание и вообще вести себя так, как будто они не были установлены.

Один проигрыватель решил, что если пользователь командует ему удалить себя и отключить его автопроигрывание, то этот проигрыватель должен прилежно удалить свои точки доступа, а затем зайти в менеджер конфигурации и отключить распознавание диска при вставке: "Если ты не хочешь, чтобы я проигрывал твои диски - отлично, я так и сделаю: я отключу автозапуск и проблема решена - никто не сможет проигрывать диски". Они также отключали автозапуск - это связанная, но отдельная возможность.

Эта программа адресовала локальную проблему (отключение автозапуска для программы X) применением глобального решения (отключения распознавания вставки дисков). Должно ли быть включено определение вставки диска и какие программы должны уведомляться об этом - это решение пользователя, а не программы. Программы не должны менять такие настройки, если только их явно не попросит об этом пользователь. Правильное поведение для программы X - удалить и отключить свои возможности, но не трогать поведение других программ.

Похоже, что программа X не отключала обнаружение вставки дисков назло. Просто люди, ответственные за программу X, просто буквально следовали документации без понимания общей картины: "В документации сказано, что мы должны отключить нашу функцию автоматического воспроизведения. Ну, я думаю, что если мы отключаем обнаружение вставки дисков - это отключит нашу функцию автоматического воспроизведения, так что всё в порядке".

Мне интересно, не форматировал ли диск их деинсталлер?

Мораль истории: не используйте глобальное состоянии для управления локальной проблемой.

Комментариев нет:

Отправить комментарий

Можно использовать некоторые HTML-теги, например:

<b>Жирный</b>
<i>Курсив</i>
<a href="http://www.example.com/">Ссылка</a>

Вам необязательно регистрироваться для комментирования - для этого просто выберите из списка "Анонимный" (для анонимного комментария) или "Имя/URL" (для указания вашего имени и ссылки на сайт). Все прочие варианты потребуют от вас входа в вашу учётку (поддерживается OpenID).

Пожалуйста, по возможности используйте "Имя/URL" вместо "Анонимный". URL можно просто не указывать.

Ваше сообщение может быть помечено как спам спам-фильтром - не волнуйтесь, оно появится после проверки администратором.