Tôi có ứng dụng Swing mà tôi muốn chuyển đổi từ spaghetti sang sử dụng tiêm phụ thuộc với Guice. Sử dụng Guice để cung cấp các dịch vụ như hàng đợi cấu hình và nhiệm vụ đang diễn ra tuyệt vời nhưng bây giờ tôi bắt đầu trên GUI của ứng dụng và không chắc chắn về cách tiến hành.Cách sử dụng ứng dụng Guice in Swing
Ứng dụng về cơ bản là JFrame
với một loạt các tab trong một số JTabbedPane
. Mỗi tab là một phân lớp JPanel
riêng biệt đưa ra các thành phần khác nhau và cần dịch vụ để thực hiện các hành động khi nhấn một số nút nhất định.
Trong ứng dụng hiện nay, điều này có vẻ hơi như thế này:
@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
}
Rõ ràng, điều này không chính xác theo thông lệ tốt nhất DI. Tôi không muốn phải @Inject
các tab vì điều đó sẽ giúp tôi trở thành một nhà xây dựng với hàng tá tham số. Tôi muốn sử dụng Guice để tiêm các phụ thuộc cần thiết vào bất kỳ đối tượng tab nào mà tôi cần mà không cần phải chuyển tất cả các phụ thuộc đó cho các nhà xây dựng tab.
Tất cả các phụ thuộc cho các đối tượng tab là các dịch vụ Module
của tôi biết, về cơ bản tất cả tôi nghĩ Tôi muốn làm là yêu cầu Guice cho các đối tượng cần thiết và xây dựng cho tôi.
Bạn có thể xem dự án Guts-GUI (mà tôi sở hữu); đây là một khung công tác dựa trên Guice để viết các ứng dụng Swing. Mặc dù chưa chính thức phát hành nhưng hiện tại nó khá khả thi. URL là: http://kenai.com/projects/guts/pages/Guts-gui – jfpoilpret
Tôi đã xem xét nó một thời gian ngắn nhưng có vẻ như điều này sẽ đòi hỏi phải viết lại hoàn toàn ứng dụng. Tôi đã có một hệ thống thực hiện nhiệm vụ rất mạnh mẽ và xe buýt sự kiện chẳng hạn. Ứng dụng không lớn (khoảng 20kloc) nhưng vẫn đủ lớn để không cân nhắc việc bắt đầu lại. –