Mam aplikację Swing, którą chciałabym przekonwertować ze spaghetti na iniekcję zależności z Guice. Używanie Guice do świadczenia usług takich jak konfiguracja i kolejki zadań idzie świetnie, ale teraz zaczynam od interfejsu GUI aplikacji i nie jestem pewien, jak postępować.Jak używać aplikacji Guice in Swing
Aplikacja jest w zasadzie JFrame
z wieloma zakładkami w JTabbedPane
. Każda z zakładek jest osobną podklasą JPanel
, która określa różne komponenty i usługi wymagające wykonywania czynności po naciśnięciu niektórych przycisków.
W bieżącej aplikacji, wygląda to mniej więcej tak:
@Inject
public MainFrame(SomeService service, Executor ex, Configuration config) {
tabsPane = new JTabbedPane();
// Create the panels for each tab and add them to the tabbedpane
somePanel = new SomeTabPanel(service, ex, config);
tabsPane.addTab("Panel 1", somePanel);
someOtherPanel = new SomeOtherTabPanel(service, ex, config);
tabsPane.addTab("Panel 2", someOtherPanel);
... do more stuff
}
Oczywiście, to nie jest dokładnie śledzić DI najlepszych praktyk. Nie chcę mieć do @Inject
kart, ponieważ to dałoby mi konstruktora z dziesiątkami parametrów. Chcę użyć Guice do wstrzyknięcia wymaganych zależności w dowolne obiekty tabulacji, których potrzebuję, bez konieczności przesyłania wszystkich tych zależności do konstruktorów kart.
Wszystkie zależnościach dla obiektów karcie są usługi, które moja Module
wie o, więc w zasadzie wszystko myślę chcę zrobić, to poprosić Guice dla wymaganych przedmiotów i ich skonstruowane dla mnie.
Możesz rzucić okiem na projekt Guts-GUI (który mam); jest to oparte na Guice środowisko do pisania aplikacji Swing. Choć oficjalnie jeszcze nie wydany, jest obecnie całkiem sprawny. URL to: http://kenai.com/projects/guts/pages/Guts-gui – jfpoilpret
Spojrzałem na to krótko, ale wygląda na to, że pociągnie za sobą całkowitą przeróbkę aplikacji. Mam już na przykład bardzo potężny system wykonywania zadań i szyny zdarzeń. Aplikacja nie jest duża (około 20kloc), ale wciąż wystarczająco duża, aby nie brać pod uwagę rozpoczęcia od nowa. –