Добавление слушателей во время выполнения? - Java Mvc
-
20-09-2019 - |
Вопрос
Моя модель в моем шаблоне MVC генерирует компоненты во время выполнения и дает их представлению, которое будет отображаться на экране через метод Update () (вы знаете, модель является наблюдаемой, а представление - наблюдатель). Но мне также необходимо добавить слушателей к этим компонентам, и у контроллера есть методы слушателя (потому что они говорят, что шаблон MVC такой), и он не участвует в этом процессе обновления. Поэтому я не могу добавить слушателей во время выполнения, но только в конструкторе контроллера при запуске.
У меня есть идея, которая делает контроллер наблюдателем, а затем дает данные в представление, а также добавляет слушателей. Как вы думаете, это было бы в порядке?
Решение
Да, сделав контроллер вашего модели наблюдателя, чтобы он позволил ему обновить представление, на мой взгляд, в ортодоксе MVC.
Другие советы
Я думаю, что у вас может быть скрещена несколько проводов.
- Модель наблюдается (проверьте!)
- Представление соблюдает модель (проверьте!)
- Контроллер связан с видом (Todo!)
№ 3 означает, что взаимодействие пользователя из представления должно вызвать зарегистрированного прослушивателя в классе контроллера, который затем обновляет состояние модели.
Это «классический» Swing MVC.
(источник: sun.com)
«Модифицированный» Swing MVC (который был рекомендован некоторыми другими ответами по этому вопросу), контроллер играет роль медиатора.
В этом дизайне представление вызывает подходящий метод на контроллере, когда пользователь выполняет действия. Затем контроллер обращается к модели (возможно, обновляя ее). Наконец, если модель изменена, она уведомляет заинтересованных слушателей (в данном случае контроллер).
Это «модифицированный» MVC.
(источник: sun.com)
Второй дизайн («модифицированный» MVC) позволяет очень очевидно развязать модель и представление.
Для получения дополнительной информации, проверьте эта статья О Java Swing MVC. Это невероятно.
Например, в Swing, прослушитель контроллера/действия, является наблюдателем для представления (кнопки и т. Д.), И при вызов кнопок (т. Е. При изменении представления) начинается и взаимодействует с моделью и снова обновляет представление (с изменениями новой модели)
Так что то, что вы предложили в конце, имеет смысл для меня :)