В этой лекции рассматривается система команд Mozilla. Система команд
служит для отделения функциональности приложения от его внешнего вида.
Она используется отдельно от системы событий DOM, хотя события и
команды могут взаимодействовать.
Очень важно, чтобы задачи, выполняемые окном приложения, как-то
отделялись от своих пользовательских интерфейсов. С одной стороны, это
связано с тем, что XUL-интерфейсы легко поддаются изменениям, и во
время проектирования, и во время работы приложения. Такие интерфейсы
накладывают жесткое ограничение на архитектуру приложения. С другой
стороны, многие существующие методики разработки программного
обеспечения могут применяться к задачам приложения, если их можно
выразить самостоятельно. Примеры таких методик - варианты
использования и схемы иерархий. Отдельное определение задачи делает ее
повторное использование более вероятным. В конце концов, такая
стратегия разделения образует гибкую среду проектирования.
У профессионально созданного приложения все команды будут формально
определены во время проектирования. Определение команд, которые нужно
реализовать - часть процесса аналитического проектирования и может
использоваться для поиска запутанных, дублирующих и беспорядочных
действий. Такие проблемы проектирования в этом случае можно будет
решить до этапа реализации, а не после.
Традиционные приложения на основе HTML часто состоят из самой
запутанной части JavaScript-кода. Систему команд также можно
рассматривать как попытку избавиться от этого неструктурированного
подхода.
Иллюстрация в начале этой лекции демонстрирует те части Mozilla,
которые реализуют команды. Из рисунка видно, что система команд
строится поверх DOM и подсистемы событий DOM, но также требует доступа
к определенному числу XPCOM-компонентов. Самые важные компоненты также
появляются как AOM-объекты. В XUL-языке есть теги, поддерживающие
систему команд, но у них нет визуального представления; в этом
отношении они похожи на тег [m]<key>[/m]. Система команд идет
дальше тега [m]<key>[/m], потому что у нее нет никакого
пользовательского интерфейса. Система команд по отношению к платформе
полностью внутренняя.