Подтвердить что ты не робот

Eclipse RCP: Действия VS-команды

В чем разница между действиями и командами в контексте Eclipse RCP? Я знаю, что они оба вносят вклад в записи меню, но какой из них лучше? И почему?

Из всех онлайн-ресурсов, которые я читал, я не мог получить четкое понимание различий между ними. Я на самом деле не пытался их использовать, но просто хотел понять их, чтобы начать с более высокой точки зрения.

Спасибо

4b9b3361

Ответ 1

Вы читали eclipse wiki FAQ Какая разница между командой и действием?

Вероятно, вы уже понимаете, что действия и команды в основном делают одно и то же: они вызывают выполнение определенного фрагмента кода. Они запускаются, главным образом, из искусственных объектов в пользовательском интерфейсе.

Основная проблема Действия заключается в том, что манифеста и код все хранятся в действии.
Хотя в действительных делегатах есть некоторое разделение, они все еще связаны с основным действием. События выбора передаются в действия, чтобы они могли изменять свое включенное состояние (программно) на основе текущего выбора. Это не очень элегантно. Также, чтобы поместить действие на определенную часть верстака, вы должны использовать несколько точек расширения.

Команды в значительной степени решают все эти проблемы. Основная идея состоит в том, что команда - это абстрактная идея некоторого кода, который должен быть выполнен. Фактическая обработка кода выполняется с помощью обработчиков. Обработчики активируются определенным состоянием рабочего места. Это состояние запрашивается выражением ядра платформы. Это означает, что нам нужна только одна глобальная команда Save, которая ведет себя по-разному, исходя из того, какой обработчик в данный момент активен.

properties of a command

Эта статья подробно описывает различия

Действия

  • Пользовательский интерфейс и обработка всегда привязаны. Вы не можете разделять друг друга
  • В то время как Действия могут быть внесены в различные части рабочего места (всплывающее меню/панель инструментов), все они были разными точками расширения, и поэтому вы в конечном итоге дублируете XML в нескольких местах. Хуже всего то, что не все точки расширения ожидают той же конфигурации.
  • Указание действий в нескольких местах - это кошмар обслуживания. Если вам нужно изменить значок действия, вам необходимо изменить во всех местах.
  • Еще одна проблема с дублированием действий в plugin.xml заключается в том, что несколько экземпляров тех же действий будут созданы в памяти.

Команды содержат больше точек расширения, но:

  • Обработчик может быть объявлен отдельно от команды. Это позволяет использовать объявления нескольких обработчиков для одной и той же команды.
  • activeWhen для всех обработчиков оценивается и выбирается тот, который возвращает true для наиболее конкретного условия. Все эти вещи выполняются без загрузки загрузчика в память. Даже без загрузки плагина!
  • Определение параметров - это возврат карты отображаемых имен и идентификаторов. Имя будет отображаться на странице привязки клавиш, и идентификатор будет использоваться для вызова команды при нажатии клавиши.
  • Определите IExecutionListener, который является просто наблюдателем выполнения команды, поэтому он не может накладывать вето на него и не вносить никаких изменений в событие

Ответ 2

Просто добавив к отличному ответу VonC, команды могут быть немного переполнены, если ваше приложение относительно невелико. Они относительно сложнее настроить, и они больше всего блестят, когда у вас есть несколько перспектив, редакторов и представлений.

Для чего-то простого, я бы пошел с действиями.

Ответ 3

И помните, что действие может быть устаревшим в более поздней версии Eclipse. Я предлагаю вам использовать команду с самого начала.