Может ли модель наблюдать за видом? - PullRequest
3 голосов
/ 20 января 2010

Я разрабатываю приложение на Java, в моем графическом интерфейсе у меня есть несколько JPanels с множеством настроек, это будет View .Есть только одна Модель на фоне этих нескольких JPanels.Обычно я бы наблюдал модель с JPanels.

Мне было просто интересно, является ли хорошей практикой наблюдать Вид с Модель ?Потому что пользователь меняет Вид , и это изменение должно повлиять на мою Модель .Или я здесь упускаю какой-то важный принцип?Спасибо за вашу помощь ..

Ответы [ 3 ]

6 голосов
/ 20 января 2010

Я думаю, это здорово, что вы задаете этот вопрос.

Какая часть, по которой вам не хватает, может помочь - это Контроллер.

Проверьте http://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller для примера.

Обычно контроллер является посредником между моделью и представлением. Он «контролирует» приложение. Единственное, что должно знать ваше представление - это данные, которые ему передаются, и способы их отображения. Единственное, о чем должна знать Ваша Модель - это данные. Контроллер связывает их вместе и содержит бизнес-логику, которая воздействует на данные и подготавливает их к передаче в представление.

То, что вы получаете от использования этой конструкции, - это простое и простое в тестировании приложение. Это действительно элегантно ИМХО.

Приветствия

Mike

2 голосов
/ 20 января 2010

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

Что если модель также была обновлена ​​с помощью чего-то другого, кроме представления, возможно, веб-службы?Тогда изменение модели через веб-сервис приведет к изменению вида, поскольку вид будет наблюдать за моделью.И также изменение в представлении вызовет изменение в модели, поскольку модель также наблюдает за представлением.Смотрите рекурсию здесь?Это не так сложно обойти, но в результате получится действительно плохой и не поддерживаемый дизайн.

1 голос
/ 20 января 2010

Чтобы связать вашу модель и вид вместе, одним из предложенных решений является добавление контроллера, чтобы у вас был реализован полный набор компонентов Model-View-Controller. Это создает очень тесную связь между всеми тремя компонентами, что с точки зрения модульного тестирования не очень желательно.

Альтернативой может быть рассмотрение шаблона Model-View-Presenter . Докладчик будет посредником между моделью и представлением и будет обновлять модель на основе любых входных данных из представления, а также будет нести ответственность за обновление представления на основе любых изменений в модели. Для ваших юнит-тестов вы сможете заменить макет-представление для проверки модели или макет-модель для проверки представления (или макетировать оба для тестирования только докладчика).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...