|
|
|||||
Регистрация: Dec 2014
Адрес: Санкт-Петербург
Сообщений: 479
|
Про делегирование
Друзья! Заранее прошу простить за большую простыню, буду признателен тем, кто сподобится дочитать её до конца и ответить что-то вразумительное. Разрабатывая свою игру, я постоянно сталкиваюсь с одним и тем же вопросом, ответ на который всегда даётся мучительно, а будучи найденным, практически никогда не приносит удовлетворения от правильного решения. Это вопрос о том, какую полноту функционала давать тому или иному классу. Чтобы было понятнее, сразу покажу пример.
Вью персонажа - класс CharacterView, выводит и администрирует компоненты: портрет, шкалы здоровья, статус-иконки (типа "кровотечение", "благословение" и т.п.). Возьмём для примера область вывода статус-иконок. Это совсем "бездумный" класс StatusIconsArea, который реализует вот такие публичные методы: public function registerIcon (newIcon:BitmapIcon, iconID: String) : void // Регистрирует новую иконку статус-эффекта public function showStatusIcon (iconID: String, showFirst: Boolean = false) : void // Показывает иконку public function hideStatusIcon (iconID: String) : void // Прячет иконку public function getIconByID(iconID: String) : BitmapIcon // Выдаёт зарегистрированную иконку public function checkIconVisibility(iconID: String) : Boolean // Проверяет, отображается ли иконка public function updateStatusArea (statusArea: StatusIconsArea, status: StatusEffect, ch: Character) : void { if (status.timeLeft > 0) { var tooltipID: String = LanguageIDs.getPhraseID(status.statusID, ch.genderID); var tooltipTxt: String = LanguagePack.getSinglePhrase(LanguageIDs.SECTION_TOOLTIPS_STATIC, tooltipID); trace ("Устанавливаем/обновляем тултип:" + tooltipTxt); if (status.timeLeft != GlobalDefaults.STATUS_TIME_PERMANENT) { var timeRemainTxt: String = LanguagePack.getSinglePhrase(LanguageIDs.SECTION_TOOLTIPS_DYNAMIC, LanguageIDs.TIME_REMAIN); timeRemainTxt = timeRemainTxt.replace("%VALUE1%", status.timeLeft); tooltipTxt = tooltipTxt.concat("\n", timeRemainTxt); } _tooltips.setDescription(_statusArea.getIconByID(iconFullID), tooltipTxt); if (!statusArea.checkIconVisibility(iconFullID)) { trace ("Иконки ID " + iconFullID + " нет среди отображаемых. Выводим!"); statusArea.showStatusIcon(iconFullID); } } else { trace ("Убираем статус-иконку"); statusArea.hideStatusIcon(iconFullID) } dispatchEvent(new Event(ViewEventTypes.INSTRUCTION_COMPLETE)); } В общем, вопрос частный такой. Какому из классов правильнее поручить выполнение всей перечисленной выше логики? А вопрос общий, чем в принципе следует руководствоваться при решении подобных задач. Какие могут быть указатели/маркеры/индикаторы, которые могут помочь сориентироваться? Спасибо.
__________________
Не сломано - не чини! |
|
|||||
Регистрация: Apr 2018
Сообщений: 42
|
Как я понял, ты просто слишком много водрузил на CharacterView. Это так называемый антипаттерн Божественный объект. Он слишком много знает и слишком много всего делает.
Цитата:
|
Часовой пояс GMT +4, время: 19:03. |
|
« Предыдущая тема | Следующая тема » |
Опции темы | |
Опции просмотра | |
|
|