Показать сообщение отдельно
Старый 31.05.2014, 00:58
in4core вне форума Посмотреть профиль Отправить личное сообщение для in4core Найти все сообщения от in4core
  № 20  
Ответить с цитированием
in4core
 
Аватар для in4core

Регистрация: Mar 2009
Сообщений: 4,219
Записей в блоге: 14
Цитата:
Этот камушек преткновения появляется, когда Модель недостаточно абстрагирована и вам кажется, что она должна хранить всякую чушь. Но она не должна. Действительно не должна. Если какие-то вызовы и передачу данных Вам удалось сделать внутри Вью минуя Модель, значит для Модели это и была чушь. Значит, так И НАДО БЫЛО делать. Это не исключение, это и есть норма. Модели это не надо — ну и отлично. Вью должна уметь сама разбираться со своими внутренними проблемами. Модель не обязана помнить все состояния кнопочек при движении мышки по экрану и прочую лабуду. Это не данные уровня Модели. Это данные уровня Вью.
Как бы получилось немного не по делу наверное ответ, так как я не сказал о чем речь. Попробую пояснить.
Имеется меню. В котором есть чекБокс допустим, я выбираю состояние, это все во вью. Благодаря тому, что я выбрал состояние, модель должна запомнить это состояние и дальше произвести несколько своих операций, разослать события в другие вью и т.п. - не суть, архитектура допустим большая.
Так вот по парадигме я должен сделать следующее : разослать событие из ВЬЮ в контрол, где сообщить какое состояние выбрано и затем запустить метод модели. Это долгая операция, но она вполне оправда в контекте МВС. Но в данный момент, допустим это разовое дело, КОГДА вью должно в итоге загрузить модель, в остальных случаях - вью только слушает модель. Посему я разрешил себе написать model.nextGen() / model.prevGen() из вью, где выбрано состояние, чем осуществлять ДОЛГИЙ подход через контроллер. В данный момент я и назвал такой вид, как вид-контроллер по сути. Но я повторил, что это разовая практика, я так не делаю, только в 1 проекте позволил - и не увидел проблем, а только плюсы. Опять же зависит от масштабности проекта, но все же..
__________________
Марк Tween