Eclipse RCP: akcje VS polecenia

Jakie są różnice pomiędzy akcjami i poleceniami w kontekście Eclipse RCP? Wiem, że oba przyczyniają się do pozycji menu, ale który z nich jest lepszy? I dlaczego?

Ze wszystkich zasobów internetowych, które czytałem, nie mogłem uzyskać jednoznacznego zrozumienia różnic między nimi. Właściwie nie próbowałem ich używać, ale chciałem je zrozumieć, aby zacząć od wyższego poziomu.

Thanks

Author: VonC, 2009-02-16

3 answers

Czy czytałeś eclipse wiki FAQ Jaka jest różnica między poleceniem a akcją?

Prawdopodobnie już rozumiesz, że akcje i polecenia w zasadzie robią to samo: powodują wykonanie określonego fragmentu kodu. Są one wyzwalane głównie z artificatów w interfejsie użytkownika

Głównym problemem działań jest to, że manifestacja i Kod są przechowywane w akcji .
Chociaż jest kilka separacja w działaniu Zdarzenia selekcji są przekazywane do akcji, dzięki czemu mogą zmieniać swój włączony stan (programowo) w oparciu o bieżącą selekcję. To nie jest zbyt eleganckie. Aby również umieścić akcję na określonej części stołu warsztatowego, musisz użyć kilku punktów rozszerzeń.

Polecenia W zasadzie rozwiązują wszystkie te problemy. Podstawową ideą jest to, że Komenda jest tylko abstrakcyjną ideą jakiegoś kodu, który ma być stracony. Faktyczna obsługa kodu jest wykonywana przez, no cóż, handlers . Obsługa jest aktywowana przez określony stan stołu warsztatowego. Ten stan jest pytany przez wyrażenia platformy core. Oznacza to, że potrzebujemy tylko jednego globalnego polecenia Save, które zachowuje się inaczej w zależności od tego, która funkcja obsługi jest aktualnie aktywna.

właściwości polecenia

This article details the differences

Działania :

  • interfejs użytkownika i obsługa są zawsze powiązane . Nie ma możliwości, żebyście się rozdzielili.]}
  • podczas gdy akcje mogą być dodawane do różnych części workbenchu( menu podręczne/pasek narzędzi), wszystkie z nich były różnymi punktami rozszerzeń i tak kończy się duplikacja XML w wielu miejscach. Najgorsze jest to, że nie wszystkie punkty rozszerzenia oczekują tej samej konfiguracji.
  • określanie działań w wielu miejscach jest koszmarem utrzymania. Jeśli musisz zmienić ikonę akcji, musisz zmienić w wszystkie miejsca.
  • kolejny problem z duplikowaniem akcji w pluginie.XML polega na tym, że w pamięci zostanie utworzonych wiele instancji tych samych akcji.

Komendy zawierają więcej punktów rozszerzeń, ale:

  • Handler może być zadeklarowany oddzielnie od polecenia. Pozwala to na wiele deklaracji obsługi dla tego samego polecenia .
  • activeWhen dla wszystkich obsługi są oceniane i ten, który zwraca true dla najbardziej wybrany jest konkretny warunek. Wszystkie te rzeczy są wykonywane bez ładowania programu obsługi w pamięci. Nawet bez ładowania wtyczki !
  • definiowanie parametrów polega na zwróceniu mapy nazw wyświetlanych i identyfikatorów. Nazwa będzie wyświetlana na stronie powiązania klawiszy, A id będzie używane do wywołania polecenia po naciśnięciu sekwencji klawiszy.
  • Zdefiniuj IExecutionListener, który jest tylko obserwatorem wykonania polecenia, więc nie może zawetować na nim ani nie wprowadzać żadnych zmian w wydarzeniu
 39
Author: VonC,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-06-15 14:10:58

Po prostu dodanie do doskonałej odpowiedzi VonC, polecenia mogą być trochę przesadą, jeśli Twoja aplikacja jest stosunkowo mała. Są stosunkowo trudniejsze do skonfigurowania i świecą najbardziej, gdy masz wiele perspektyw, edytorów i poglądów.

Dla czegoś prostego, wybrałbym działania.

 6
Author: Mario Ortegón,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-02-16 07:36:05

I pamiętaj, że działanie może być przestarzałe w późniejszej wersji Eclipse. Sugerowałbym, żebyś używał rozkazów od początku.

 4
Author: nanda,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-06-14 08:09:59