![]() |
Как часто вы используете обсерверы, синглтоны и прочую глобальную муть в проектах
Я в крупных использую.
Сейчас на одном маленьком попробовал без этого. Остался доволен. Но это в проекте с парой десятков классов не считая внешних фреймворков. В чем-то посерьезнее я думаю довольно-таки сложно наладить коммуникации. Здесь у меня получается что мейнКонтроллер подписан на прослушиввание от хоста событий вьюх,а во вьюхах практически все события бабблятся. И вот эти события обрабатываются частично "маленькими" контроллерами, а частично доплывают аж до мейнХоста и там обрабатываются мейнКонтроллером. С одной стороны круто, что четкая структура и удобно рулить, меньше допускается структурных ошибок. А с другой стороны если проект будет нагружен то придется тулить какие-то промежуточные контроллеры, группировать модули по функциональным группам или хз еще как. Короче добавлять пару узлов в дерево. (как вариант - придется раздуть мейнКонтроллер до серьезных размеров). Поделитесь своим опытом и соображением на эти темы. |
В крупных проектах точно использую синглтон, для хранения данных, которые почти везде нужны. Возможно еще какие-нить паттерны, но названий не знаю.
|
Практически не использую. Разве что какой нибудь логгер. Изредка EventBus из as3commons и Lang оттуда же.
|
Вот сейчас использую в проекте основанном на Gaia. И то не синглтон, а мувик который приспособил под это дело. Это такой костылище! Но иначе контролировать все пэйджи нельзя. :( Уродская система. Совершенно её не вкурил. Заказчик, просто, настаивает на решении именно на платформе Gaia...
|
@Котяра, а можешь поделиться идеями насчет самой структуры?
Я тут вижу три варианта: 1. контроллер общается с дочерним (скорее внучатым, ибо дочерний можно сеттерами или функциями напрямую дергать) 2. Контроллер общается с родительским контроллером(или дедушкой) 3. Общение с одноуровневым. Как это реализовано? Добавлено через 1 минуту Цитата:
|
Как же сейчас все это гладко и красиво сделано в Tide (от GraniteDS). Я уже так привык, что гляда на все свои старые телодвижения, содрагаюсь. Правда, это не чистый флеш, а флекс, но вроде при желании можно приспособить (да и исходники есть).
Удобно, что осваивать его и серверный Спринг начал примерно параллельно, поэтому принципы DI (IoC) понимал и на клиенте, и на сервере. Возможно, сорри за оффтоп, но это близко к вопросу ТС о синглтонах - фактически Injection - одна из реализаций, только завуалированная красиво и кодом поддерживать не надо - фреймворк сам берет это на себя. |
Ну ДИ это одна из реализаций "глобальной мути" когда всё везде доступно и пофигу на иерархию. Так что не оффтоп.
|
Цитата:
собой не отдельные объекты, а отдельные программы общающиеся через крайне ограниченный интерфейс скрытый где-то в недрах фреймворка. Ну и на фига?! Спрашивается. Для любителей "в шкафу и на лыжах"? Может я чего-то в ней не до понял (всего неделю с ней работаю), или, просто, в этом конкретном проекте она нужна как собаке пятая нога, но жутко бесит... :( |
EventDispatcher - это Observer. Display List - это Composite. Очевидно, что использую.
Или речь про не нативные? |
Цитата:
|
Цитата:
|
Цитата:
registerObserver - addEventListener unregisterObserver - removeEventListener notifyObservers - dispatchEvent --- Так что реализация Observer-а во flash смысла не имеет. Он уже есть. |
Цитата:
|
Нет, нет и еще раз нет. При чем здесь синглтон? С какой стати вы смешиваете эти шаблоны?
Я даже вам по схемке раскидаю. По той что в вики: Observable - EventDispatcher Observer - Function Соответственно ConcreteObserverable это конкретный класс реализующий EventDispatcher, а Observer это конкретный метод вызываемый в качестве обработчика. EventDispatcher это просто одна из возможных реализаций шаблона Observer. |
Цитата:
Код AS3:
|
Ндааааа... ForeverAloneton
|
Цитата:
Цитата:
|
Цитата:
Вот вы мне сейчас разжевали, я в вики повнимательнее рассмотрел схему. И до меня дошло. Спасибо. Цитата:
Цитата:
|
Цитата:
В массе своей обсервер понимается именно как что-то глобальное с синглтоном. |
Цитата:
|
Цитата:
|
Контроль количества экземпляров можно сделать и без синглтонов. Синглтон просто один из способов.
|
Цитата:
LoaderInfo - DisplayObject? URLLoader - DisplayObject? Причем тут дисплей лист? |
Цитата:
Код AS3:
|
Цитата:
|
Цитата:
Цитата:
|
Цитата:
Цитата:
|
Цитата:
Надо обязать автора любой темы, с большим кол-вом страниц обязать подводить итог и дать возможность закрывать тему. Либо добавить кнопку - "я использовал это решение". Ему диалоговое окошко - введите теги, тема закрывается, автору решения плюсики в карму. Тогда можно быстро найти ответ как в вики. ;о) |
Цитата:
Цитата:
Цитата:
Добавлено через 1 минуту Цитата:
|
Цитата:
|
Цитата:
З.Ы, Если уж плясать от добавления дисплей обжекта в контроллер то можно и хостом диспатить, на хост триады у контроллера ссылка то есть. И тот самый хост как правило добавлен в дисплейлист родительского хоста. А я например стараюсь каждой триаде выделять отдельный контейнер, получается то же четкое дерево хостов как и самих контроллеров. |
При чем тут вообще DisplayObject? EventDispatcher не является DisplayObject, верно только обратное утверждение.
Цитата:
Цитата:
|
Цитата:
Добавлено через 1 минуту Цитата:
Цитата:
|
вьюха не обязательно DisplayObject
|
Цитата:
|
Цитата:
|
Я привел цитату, откуда возник этот вопрос. Возможно я вас неправильно понял.
|
Ну не важно. А что скажете на тему диспатча ивентов хостами из контроллеров?
Всё-таки идея сохранения структуры дерева мне интересна. Чтоб не пихать глобальных евентБусов или же своих обсерверов. |
Получится тот же event bus, только менее гибкий, т.к. шин событий может быть и несколько.
|
Резюме: единственный минус нативных событий - в отсутствии их нативного бабблинга вне DisplayObject.
За всю мою жизнь требовалось бабблить событие не из вью... ну раза 2-3. И то контроллерами. И я без тени презрения забаблил их из контроллера по ветке вью. Реальный случай когда нужен бабблинг по моделям мне до сих пор не встретился. Кстати, мне до сих пор кажется, что синглтон используют ради его глобальности и только. Типа просто static - нуб, а если синглтон - то это паттерн, и не нуб ) Уходите от предрасудков, господа. Делайте так как удобно и положите на названия. Тут дело не в выборе слова. |
| Часовой пояс GMT +4, время: 12:23. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.