Цитата:
|
Таким образом, вы с успехом засовываете всю логику и половину модели дробовика во вью
|
Это очень важный вопрос — что является логикой. Посылать ли событие "выстрел", если юзер нажал клавишу в момент перезарядки оружия — это логика? Его нажатие НИЧЕГО НЕ МЕНЯЕТ в игре. Данные Модели здесь никоим образом не должны изменяться. Никакого события нет. Никакой "логики" на уровне Модели здесь не требуется.
"Засунуть всю логику" было бы рассчитать полет пули и ее попадание в противника прямо во Вью (где есть все координаты), а для Модели посылать только событие "враг получил пулю, проверьте как он там".
"Вытащить всю логику" означает каждый пиксель полета пули брать из Модели, и каждый кадр предсмертных судорог, и каждый кадр процесса перезарядки (ну, а что еще такое "таймер в модели", по-вашему?) Вам то не кажется, что Вы пихаете Вью в Модель?
Весь вопрос стоит на том, что именно считать данными. Есть ли какие-то данные в том, что юзер нажал курок во время перезарядки? Зачем это Модели? Это вопрос чисто интерфейса игры с пользователем. Зачем Модели подтверждать выстрел? Вью не справится с тем, стрелять или нет, на основании данных (из Модели!) о количестве патронов в обойме и текущего состояния анимации дробовика? (готов к выстрелу/не готов)? Зачем конкретно Модели знать, готов к выстрелу дробовик или нет? На какие данные/логику это может повлиять, кроме как "реагировать на событие ЮзерНажал, или нет, если вдруг это событие придет"? Так вот придет ли событие, это вопрос интерфейса, то есть Вью.
Добавлено через 35 минут
Цитата:
|
вам таки придётся разделить логику, отображение и данные на отдельные составляющие
|
Простите, но ЛОГИКА не может существовать без ДАННЫХ. Держать логику в контроллере означает сделать из Модели гулящую девку, готовую отдавать все что попросят, а не только нужные для отображения конечные результаты(!) вычислений; означает обеспечить связку контроллер-модель сотней геттеров или проще уж тупо делать все её данные публичными. Это ООП?
Контроллер является ключевой фигурой в парадигме MVC. Вот только не потому, что является мозгом приложения. А потому, что именно он обеспечивает суть концепции MVC — разделение данных и отображения. Не будь контроллера, мы бы писали модель для конкретной вью и вью для конкретной модели. Только и всего. Контроллер призван собрать в себе всю эту конкретику. Он знает язык Вью и знает язык Модели. И "язык" здесь не просто как перевести слово. Он переводит СМЫСЛ, потому что смыслы для Вью и для Модели разные. Контроллер должен понимать смысл событий Вью для Модели. Иначе все вью будут вынуждены изначально писаться для этой конкретной модели, а модель — понимать, что ей делать при "юзер нажал клавишу Р".