Добавление слушателей во время выполнения? - Java MVC - PullRequest
3 голосов
/ 16 марта 2010

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

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

Ответы [ 3 ]

3 голосов
/ 16 марта 2010

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

  1. Модель наблюдаема (проверьте!)
  2. Вид наблюдает за моделью (проверьте!)
  3. Контроллер привязан к виду (TODO!)

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

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

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

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

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

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

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

2 голосов
/ 16 марта 2010

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

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

2 голосов
/ 16 марта 2010

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

...