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
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.
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
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.
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.
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