Показать сообщение отдельно
Старый 21.11.2017, 12:08
Appleman вне форума Посмотреть профиль Отправить личное сообщение для Appleman Найти все сообщения от Appleman
  № 8  
Ответить с цитированием
Appleman
 
Аватар для Appleman

Регистрация: Dec 2014
Адрес: Санкт-Петербург
Сообщений: 479
Друзья, подскажите ещё по MVC, плиз. Не получается по полочкам разложить. Аккурат к вопросу недавно упомянутого "ЧТО" и "КАК"

Кейс 1: У персонажа в игре есть есть статусы, т.е. свойства типа Boolean, которые меняют своё значение по ходу игры и оказывают влияние на другие параметры. Типичный пример: состояния персонажа из тактических игр или RPG: кровотечение, отравление, действие заклинаний и т.п. Это, безусловно, данные Модели. При этом некоторые (но не все) статусы должны явно выводится для пользователя в виде иконок. Это прерогатива CharacterView. Проблема следующая. Далеко не все подобные свойства нужно отображать пользователю. Кто должен "знать", какие из них подлежат выводу, а какие носят служебный характер? Мне кажется, что view, но я сомневаюсь.

Кейс 2: по условиям игровой логики, накопление некоего свойства сверх установленного порогового значения открывает новые возможности. Типичная для многих жанров ситуация, когда, например, для проведения каких-то специальных атак требуется энергия или мана выше определённого заранее известного уровня. В модели всё понятно: есть значение порога (одного или нескольких), есть условие на превышение данного порога. При этом я хочу, чтобы во View персонажа выводились статус-иконки типа "готов к усиленным атакам" и "готов к супер-атакам". Как правильнее сделать с т.з. MVC? Мне видится либо вариант реализации в Модели этих статусов, т.е. создаём свойство для Character типа Boolean, чтобы при достижении порогового значения оно менялось с false на true и обратно, а view тогда просто отображает эти статусы, не приходя в сознание. Второй вариант - оставлять Модель как есть, ведь для её функционала ничего добавлять не нужно, а во view дописывать логику, что если такое-то значение свойства превысило такой-то порог (всё есть в Модели), это означает, что нужно пользователю вывести вот такую-то иконку.

И ещё вопрос по технике. У нас главный View создаёт два CharacterView для игрока и противника. А в них -
ещё пачка дочерних компонентов: изменяемые портреты, полоски здоровья, статус-иконки и т.п. Корректно ли будет со стороны CharacterView слушать напрямую модель своего персонажа, или всё-таки все данные от модели через главный View должны идти? И как родительские вью должны взаимодействовать с дочерними? У меня пока был только один уровень, с ним было всё просто: родительский компонент обращается к public методу дочернего и передаёт в него данные для отображения. А если таких уровней 3-4?