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