Подтвердить что ты не робот

Качели с Guice

Я уже использую Guice для модели данных своего приложения, и до сих пор я вполне доволен этим. Тем не менее, часть GUI скоро станет Big Ball of Mud. Мне сложно использовать Guice здесь, потому что компоненты и модели Swing тесно связаны друг с другом и часто вынуждают определенный порядок инициализации.

Мое приложение состоит в основном из заголовка с большим количеством фильтров, центрального и довольно сложного компонента JTree и множества действий (например, из JPopup), меню, диалогов, мастеров и т.д. Основная проблема заключается в том, что у меня есть много связей между компонентами и действиями (например, сложные проверки, обновления деревьев...). Не могли бы вы дать мне несколько советов, как структурировать этот GUI с Guice?

Мне известно о таких библиотеках, как GUTS, но документация очень тонкая, я бы предпочел не добавлять другую зависимость к моему проекту и не изучать другой API (например, я не знаю Swing Application Framework).

4b9b3361

Ответ 1

Я предпочел бы предложить правильный MVC, даже лучше Модель презентации - View - Controller. Отделите свой код правильно, и Guice подойдет естественно. Например:

В представлениях классов должна быть часть здания, которая рисует статический контент (метки, дерево, кнопки и т.д.) и обновляет код, который реагирует на изменения в модели представления. Все слушатели действий должны вызывать некоторый код на контроллере. Как модель представления, так и контроллер должны быть введены Guice, как и все другие зависимости.

Эта организация позволит легко протестировать с заменой представления с помощью некоторого кода тестирования, который будет прослушивать изменения в модели представления и вызывать действия над контроллером.

Ответ 2

Я бы посоветовал посмотреть Guts-GUI. Это среда Swing UI, основанная на модели инъекций на основе Guice.

Ответ 3

Я думаю, что проблема, вероятно, в общей архитектуре. Вероятно, вы захотите проверить, можете ли вы реорганизовать приложение на более простой и модульный. Как и рекомендовал Борис, я бы также предложил использовать образец модели представления - поиск Мартина Фаулера и Карстен Ленцша - и библиотеки JGoodies.

Для проблемы с действиями см., как обрабатываются Swing Application Framework и Netbeans Plaform. Например, если действие используется как в представлении, так и в меню, вы можете сделать его доступным через глобальную карту.

Ответ 4

Недавно мы начали с GUICE с качелями. Вот что мы сделали, что может вам помочь.

а. Когда вы хотите вставить модель в таблицу/дерево, вы можете ввести поставщика модели вместо этого и сделать provider.get(), чтобы получить модель в контрукторе.

например

public class Mytable extends JTable {
    public Mytable(Provider<MytableModel> modelProvider) {
        this.setModel(modelProvider.get());
    }
}

б. Вы можете сделать модель общей и использовать одну и ту же модель в разных таблицах.

с. Модель может иметь дескриптор источника данных, который может быть добавлен с помощью factory, если необходимо, с помощью вспомогательной инъекции. Количество примеров, доступных при переполнении стека.

д. Ваша модель может быть гибкой структурой данных, которая использует модель для возврата соответствующего значения cell/leaf/other.

е. Когда у вас есть действия, вы вводите действия в своих компоновщиках компонентов и присоединяете их к соответствующим компонентам.

ф. Используйте аннотацию @Singleton, где у вас есть общий объект, например модель, введенная в 2 разных объекта, например действие и компонент.]

г. Используйте настраиваемую область, когда вам нужно использовать количество наборов экземпляров объектов. Пользовательские области отлично подходят для этого, так как он действительно делает код действительно чистым.

Надеюсь, что это поможет...