Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Я пишу отвратительный код. Что делать? (http://www.flasher.ru/forum/showthread.php?t=147941)

Blax 17.12.2010 17:40

Я пишу отвратительный код. Что делать?
 
Доброго дня. Вопрос о методологии наверное.

Новичок, никак не догоню логику построения нормальных, красивых Flash-приложений.

Дело в том, что объектная модель приложения (как правило) не стыкуется с моделью отображения.
Из-за этого приходится хранить ссылки на объекты в глобальных переменных, объявлять публичными функции и переменные, которые должны быть защищёнными, создавать листенеры, логика работы которых не соотвествует логике взаимоотношений объектов и заниматься прочим непотребством, за которые в обычном программировании ставят к стенке.

Думал понимание придёт с начальным опытом.... Не, не выходит каменный цветок...

Подскажите пожалуйста - как лучше организовывать проект, если взаимоотношения объектов в сцене не соотвествует логике объектов приложения.
Пример:
Логика приложения:
  • Дом
    -
  • этаж
    --
  • квартира
    ---
  • планировка
  • Метка с информацией о интересуемом объекте

Логика отображения:
  • Дом и селектор этажей
  • Этаж, содержащий квартиры
  • Планировка квартиры

Проблемы:
1. Планировка квартиры должна осуществлять навигацию по этажу, хотя в теории дочерние элементы не обязаны знать о своих владельцах. Приходится хранить ссылку на владельца или пользоваться пользовательскими событиями, чтобы возбудить этаж к жизни.

2. Планировки этажей повторяются - на каждом этаже выгодно использовать один и тот же графический элемент отображения. Дуплицировать тяжёлый объект смысла нет. Храню ссылку в объекте этажа, отображаю её на экране. Это создаёт сложности с квартирами внутри этажа - при переключении приходится проводить реинициализацию всего содержимого этажа в зависимости от содержимого конфига (продано\не продано).

3. При наведении мышой на квартиру отображается метка, которая может пересекаться с квартирой - мышь на метке - происходит ROLL_OUT с квартиры, если цеплять метку ребёнком к квартире, то метка начинает наследовать свойства отображения (например прозрачность), чего не хочется.

И так далее и тому подобное. Понятно, что в частностях и всякими "извратами" это можно решить, но как быть в глобальном смылсе?!

Какая-то система, методология, идеология в конце концов...

Всё скатывается к куче кода, в котором 20% смысла и 80% учёта особенностей национальной рыбалки модели отображения FLASH.

Помогите, не дайте пропасть.
Господа, у кого опыт не одного проекта, поделитесь идеями пожалуйста!!!


p. s.
Переделка проектов с нуля не даёт радостного ощущения, что "всё правильно".

p. p. s. примеры курил, книги прочитал, первые приложения написал, с ООП, UML и прочими матными словами знаком на практике.

Bgg 17.12.2010 17:50

А про MVC тоже читали?

Gaen 17.12.2010 17:55

Мне однажды доводилось решать именно такую задачу, как вы описали. В итоге вышел так себе монстрик :)
http://gaen.office.goodgear.ru/lulz/tigo.swf
Стучите в аську, помогу чем смогу.

КорДум 17.12.2010 18:08

GAIKER, для интереса посмотрел вашу флешку - аж три РТЕ вылезло:
Код:

SecurityError: Error #2122: Нарушение изолированной среды: Loader.content: http://gaen.office.goodgear.ru/lulz/tigo.swf не может осуществить доступ к http://laganaki-s-e.ru/images/2a/c3/41/56172a93ef5e.jpg. Необходим файл политики, но, когда были загружены эти мультимедийные данные, флаг checkPolicyFile не был установлен.
        atflash.display::Loader/get content()
        atfl.containers::UILoader/get content()
        atblocks::PhotosBlock/photoLoaded()
        atflash.events::EventDispatcher/dispatchEventFunction()
        atflash.events::EventDispatcher/dispatchEvent()
        atfl.containers::UILoader/passEvent()
        atfl.containers::UILoader/handleComplete()


TanaTiX 17.12.2010 18:12

КорДум, это еще не лазил дальше :)
Blax, тут главное отличать общее от частного, что есть объект и пр.
Вот к примеру - дом - это объект - экземпляр класса Дом.
В нем этажи - их количество это свойство данного объекта. При этом каждый этаж - тоже экземпляры класса, каждый знает о своем содержимом, но ему до фени, на каком он этаже.
По домам и этажам помню у Мука еще было.
А вообще очень хорошо помогают всплывающие пользовательские события

Gaen 17.12.2010 18:12

КорДум, вы правы, за такое должно быть стыдно :)
Эта флэшка вырвана из своего контекста и сохранена на память. Она тягает картинки с другого домена, отсюда и ошибки.
Кстати, текст ошибки помог вспомнить, где лежит оригинал, который ошибок не кидает: http://laganaki-s-e.ru/flash/tigohouse.swf

КорДум 17.12.2010 18:19

Так лучше (:
Жаль, что текст выделить нельзя, почему убрали выделение?
Blax, По ссылке, что вам дал Bgg первым постом идет PsychoTiger, загляните к нему в блог, он писал подробные и занимательные статейки про MVC.

Gaen 17.12.2010 18:21

КорДум, насяльника сказал, я сделал)

Blax 20.12.2010 10:43

Ага... :)
 
1. Огромное спасибо!!!

2. MVC не курил, но слышал, спасибо за наводку.

3. Пользовательские события штука юзабельная, но в данном случае не очень приятная, надо писать дестроеры объектов и слушателей, следить за подчисткой листенеров, всё это как раз то, от чего хотелось бы уйти. Получается нечто похожее на тарелку со спагетти - много связей для простого дела.

4. Выходные это +6 часов сна, посему с утра пришла мысль (ого, редкость :) ): что если разделить модель визуальную и модель логики приложения? То есть TanaTiX как раз описывает модель приложения, а параллельно к ней создать иерархию полностью независимую отображения с торчащими ручками, за которые можно дёргать.
Или даже пойти дальше - универсальный конвейер(ы) событий (не тех, которые встроены в язык), нечто вроде общей шины для обмена событиями и данными внутри некой формации объектов. Регистрировать в нём объекты и события и использовать. Быть может это велосипед конечно... И время займёт чтобы сделать, но...

Ещё раз спасибо огромное, пойду посмотреть, что за зверь MVC :)

Nemez 20.12.2010 16:10

Цитата:

Сообщение от TanaTiX (Сообщение 958100)
А вообще очень хорошо помогают всплывающие пользовательские события

А как они помогают?


Часовой пояс GMT +4, время: 02:13.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.