Опубликован: 10.12.2007 | Уровень: специалист | Доступ: платный
Лекция 9:

Команды

9.10. Отладка: обработка неопознанной команды

Когда взаимодействуют система команд и система управления фокусом Mozilla, нужно учитывать некоторые тонкости. Очень важно, чтобы фокус был корректно установлен, когда впервые появляется окно XUL. Так вызываются window.focus() или window.content.focus().В последних версиях нет жесткой необходимости следить за фокусом, но это по-прежнему хороший стиль программирования.

Если проблемы с фокусом все-таки появятся, есть опасность нарушить работу не только платформы Mozilla, ни и самого окружения рабочего стола. Завершить работу платформы не всегда достаточно, может потребоваться даже перезагрузка компьютера, по крайней мере, в Microsoft Windows.

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

Существуют многочисленные примеры кода в платформе Mozilla и ее приложениях, где не была реализована необходимая проверка данных на корректность. Обычный пример - атрибут XML, имеющий булевские значения. Обычно платформа проверяет их на значение "true", и это значит, что в ином случае они могут иметь значение false. Это быстрый стиль разработки, но он же делает отладку более трудной, потому что невалидные значения или принимаются или молча игнорируются системой. Это в особенности верно для команд, которые имеют добавочный уровень сложности - диспетчер, между вызовом команды и ее выполнением.

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

Строгая проверка строк команд не реализована в платформе Mozilla, потому что приложения должны быть открыты для улучшений. Для локальных приложений нет оснований пренебрегать точным определением и проверкой команд. Лишь в редких случаях, подобных расширяемым играм типа MUDs [Multi-User Dungeons--text games], IRC, онлайновых игр - можно оставить множество команд расширяемым и точно не определенным.

Контроллер "detective", о котором шла речь в разделе "Практика" настоящей лекции, позволяет удостовериться, что все идет правильно. Этот контроллер никогда не должен получить команду. Если он ее все же получит, значит, что-то неверно и требуются исправления.

Заметим, что неизвестные команды и неизвестные события - разные вещи. Нет необходимости блокировать или улавливать неизвестные события. Такие события будут обработаны службой обнаружения событий, см. 6.6. "Отладка: обнаружение событий", обсуждавшейся в "События" , "События".

9.11. Итоги

Платформа Mozilla предоставляет систему спецификации и распространения команд. Эта система требует функционального анализа приложения. Подобный функциональный анализ позволяет прикладному программисту разделить задачи, выполняемые приложением в процессе работы, и его графическую оболочку. Такое разделение требует ясности при проектировании приложения. Это предохраняет реализацию системы команд от изменений, которые могут повлечь изменения в более подвижной и подверженной даже влияниям моды графической оболочке. Система команд может автоматически определить, где находится реализация нужной команды, выполнить команду и отслеживать текущее состояние команды.

Система команд - пример абсолютно невидимой для пользователя функциональности платформы. Она также отделена и от системы событий DOM, основанной на стандартах W3C. Механика системы отслеживает внешний облик приложения, но не зависит от него и не влияет на него прямо.

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

Как и фокусное кольцо в предыдущей лекции, система команд ограничена единственным окном платформы. Следующая лекция посвящена вопросам одновременного использования нескольких окон.

Дмитрий Гуменюк
Дмитрий Гуменюк
Россия, Звенигород
Konstantin Grishko
Konstantin Grishko
Россия, Москва, Московский финансово-промышленный университет "Синергия", Москва