Тема: MVC - эвенты
Показать сообщение отдельно
Старый 02.06.2017, 04:08
Godwarlock вне форума Посмотреть профиль Отправить личное сообщение для Godwarlock Найти все сообщения от Godwarlock
  № 1  
Ответить с цитированием
Godwarlock

Регистрация: Jan 2012
Сообщений: 836
По умолчанию MVC - эвенты

Всем привет. Немного врубаюсь в данный паттерн, но возник вопрос о например тач событиях. Где правильнее всего должна быть подписка на кнопки? Если во вьюшке, то я вынужден прибегать к выделению отдельного класса, в котором будет инициализирована подписка на все кнопки чтобы не замусорить отображение, в этой вьюшке, которая отправляет в контроллер сам факт нажатия. Но в чем суть контролера заключается? Если вся логика в модели, то у меня получается
View - отправляет запрос контроллеру, типо TouchEvent - _controller.setX();
Controller - setX()_model.setX();
Model - setX(); - тут логика и уже в обратку дипатч вьюшке.

Мне кажется тут что-то неправильно. Из вью ничего не передается контроллеру, только уведомление, что была нажата та или иная кнопка, собственно смысл реализовать TouchEvent внутри вью?
2) Если реализовать TouchEvent внутри контроллера, тогда он должен хранить ссылку на вьюшку, только ради получения ссылок на дисплей обджекты. Но в таком случае, мне не приходится из вьюшки, отправлять контроллеру, а тот в свою очередь в модель. Получается просто контроллер-модель. В этом случае, я вижу больше логику, чем когда реализуется TouchEvent во вью, потому то таким образом, не надо лишний раз обращаться к контроллеру. В общем как-то так, поясните по факту, как всё же грамотнее будет или может я что упускаю. С другой стороны, если во вьюшке создается 10 объектов, которые присылает модель, получается, вьюшка, должна оповестить контроллер о том, что было создано 10 объектов и следовательно, если оно надо, в контроллере подписать все эти 10 объектов. Тут тоже очень смутно всё видится.
И вот еще такой вопрос. Есть модель карты, есть модель интерфейса. Первая отвечает за всё, что связано с картой, отображение, удаление, сортировка, хранение и прочее. Модель интерфейса, хранит состояние тех же самых кнопок. Типо нажал на создать объект, у курсора появляется имедж и следует за ним(обработка слежения в модели карты), соответственно в модели интерфейса я ставлю флажок boolean isCreate. Но на этот isCreate, должна ссылаться модель карты, потому что если isCreate false, то модель карты обрубает обработку создания объекта на карте. Что это получается, мне надо передать ссылку модели интерфейса в модель карты? Будет ли это правильно? Или всё же мне надо просто расширить модель карты и перенести все состояния из модели интерфейса, в модель этой карты и вообще не разделять интерфейс от самого содержимого карты, ограничившись 2 вьюшками(ViewGUI,VewMap), 2 контроллерами(ControllerGUI,ControllerMap) и 1 моделью(MapModel).


Последний раз редактировалось Godwarlock; 02.06.2017 в 04:22.