Вопрос

Моя модель в моем шаблоне MVC генерирует компоненты во время выполнения и дает их представлению, которое будет отображаться на экране через метод Update () (вы знаете, модель является наблюдаемой, а представление - наблюдатель). Но мне также необходимо добавить слушателей к этим компонентам, и у контроллера есть методы слушателя (потому что они говорят, что шаблон MVC такой), и он не участвует в этом процессе обновления. Поэтому я не могу добавить слушателей во время выполнения, но только в конструкторе контроллера при запуске.

У меня есть идея, которая делает контроллер наблюдателем, а затем дает данные в представление, а также добавляет слушателей. Как вы думаете, это было бы в порядке?

Это было полезно?

Решение

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

Другие советы

Я думаю, что у вас может быть скрещена несколько проводов.

  1. Модель наблюдается (проверьте!)
  2. Представление соблюдает модель (проверьте!)
  3. Контроллер связан с видом (Todo!)

№ 3 означает, что взаимодействие пользователя из представления должно вызвать зарегистрированного прослушивателя в классе контроллера, который затем обновляет состояние модели.

Это «классический» Swing MVC. alt text
(источник: sun.com)

«Модифицированный» Swing MVC (который был рекомендован некоторыми другими ответами по этому вопросу), контроллер играет роль медиатора.

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

Это «модифицированный» MVC. alt text
(источник: sun.com)

Второй дизайн («модифицированный» MVC) позволяет очень очевидно развязать модель и представление.

Для получения дополнительной информации, проверьте эта статья О Java Swing MVC. Это невероятно.

Например, в Swing, прослушитель контроллера/действия, является наблюдателем для представления (кнопки и т. Д.), И при вызов кнопок (т. Е. При изменении представления) начинается и взаимодействует с моделью и снова обновляет представление (с изменениями новой модели)

Так что то, что вы предложили в конце, имеет смысл для меня :)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top