eclipse extensions przez adnotacje

0

ostatnio dołączyłem do zespołu rozwijającego aplikację wielowarstwową z grubym klientem pisanym w SWT. Aplikacja kliencka składa się (o zgrozo!!) z 25 projektów a zależności pomiędzy tymi projektami to koszmar, i nikt nad nimi nie panuje.
W niektórych z tych projektów znajdują się w miarę ogólne mechanizmy, które rozszerzamy w innych projektach (np manager kart konfiguracyjnych albo zestaw dialogów edycyjnych dla encji albo menu głowe aplikacji). Koszmar w zależnościach projektowych doprowadził do tego, że czasami aby dodać nowa kartę konfiguracyjną trzeba w jakimś tam miejscu w bloku static dodać nazwę klasy (string zawierający nazwę klasy). Mega lamerskie ale co zrobić???.
Żeby do menu głównego aplikacji dodać nową opcję w menu za każdym razem trzeba modyfikować główną klasę aplikacji (ta gdzie jest main i tworzone jest okno) ponieważ mechanizm tworzący menu jest w głownym projekcie który z kolei nie może być w zależnościach innych projektów bo stworzą się cykle. jakikolwiek refaktor w strukturze projektu nie wchodzi w ogóle w grę bo oczywiscie w stringach gdzies tam są nazwy klas a eclipsowy refaktor tego nie łapie.

takich przykładów mogłbym podawać wiecej ale nie o to chodzi.

Zaproponowałem, żeby wykorzystać eclipse extensions (wszystkie rozszerzenia znajdowane na dynamicznie itd) - tak jak mogłem się spodziewać nic z tego bo to za duża zmiana poza tym Eclipse RCP jest trochę ciężkie i trzeba utrzymywać pliki tekstowe pt. plugin.xml. I wtedy wpadłem na genialny pomysł.

Zrobię mechanizm podobny do Eclipse Extensions ale konfigurowalny przez adnotacje ze skanerem klas. dzięki temu pozbędziemy się miejsc gdzie podajemy nazwy klas w stringach a nawet jakiegolwiek innego sposób dodawania rozszerzen do wspomnianych mechanizmow.

Teraz zeby dodac karte konfiguracyjna wystarczy nad wybrana implementacja Composite umieścic jedna adnotację i gotowe.
Żeby dodać dialog edycyjny - wystarczy nad implementacja takiego dialoga umiescic jedna adnotacje.
Tak samo sprawa sie ma z opcjami w menu głownym aplikacji oraz wieloma innymi mechanizmami.

teraz pytanie do was: co myślicie o takim frameworku: eclipse extensions ale przez adnotacje (abstrahując od przedstawionego środowiska pracy).

0

Fajny pomysł. Popatrz jeszcze na Własne usługi w JSE i pozwól by każdy moduł był wyszukiwany przez mechanizmy dostarczone z JVM. Całość może być bardzo fajna.

0

ServiceLoader jest ciekawą propozycją i do lokalizacji modułów zapewne się nada (właśnie rozważam jego wykorzystanie).
Do ładowania rozszerzeń modułów jego wykorzystanie byłoby jednak uciążliwe.
Np załóżmy, że mamy wspomniany mechanizm zarządzania kartami konfiguracyjnymi aplikacji (powiedzmy instancjami Composite). Konstruktory Composite pobierają co najmniej 2 parametry a ServiceLoader wymaga konstruktora bezargumentowego. Oczywiście można to ominąć poprzez zdefiniowanie interfejsu fabryki kart. To wiązałoby się jednak z potrzebą implementacji fabryki dla każdej karty konfiguracyjnej. Jesli kart konfiguracyjnych byłoby powiedzmy 20, tworzenie ich zaczęłoby się robić męczące i zdecydowanie nadmiarowe.
Podobnie sytuacja ma się z opcjami w menu. Każdy menuitem reprezentuje pewną akcję. Akcję z kolei uruchamiana jest w kontekscie (okno) a kontekst w moim przypadku przekazywany jest w konstruktorze akcji. Znów musiałbym tworzyć fabryki a że opcje w menu liczą się już w dziesiątkach to mi sie tego robić po prostu nie chce.
Dodatkowo biorąc pod uwagę, że moduły mogą od rozszerzeń wymagać dodatkowe konfiguracji takich jak: w ktorym miejscu w menu ma sie pojawic dana opcja, tym bardziej skłaniam się ku adnotacjom i własnemu skanerowi.

btw każdego zainteresowanego zapraszam do odwiedzenia mojego projektu SimpleXtension na google code: http://code.google.com/p/simplextensions

1 użytkowników online, w tym zalogowanych: 0, gości: 1