|
|
|
|||||
Регистрация: Jul 2007
Адрес: Россия, Москва
Сообщений: 522
|
Организация работы событий
Здравствуйте.
Интересует следующий вопрос, скорее даже нюанс проектирования приложений: 1) Допустим, у нас есть какой-то объект, который генерирует большое количество событий (больше 10). 2) Большинство из этих событий однотипные и через эти события не должны передаваться параметры. 3) Через некоторые события должны передаваться параметры, которые неотрывно привязаны к событию. Под параметрами, в данном контексте, я понимаю public переменные, которые можно считывать наподобие свойств target и/или delta у MouseEvent. Возникает вопрос: что делать, создавать 10 классов для каждого типа событий, каждое событие которого бы обладало только теми параметрами (читай открытыми свойствами), которые принадлежат к данному типу события, или целесообразней, в целях «не плодить большого количества классов и сэкономить время» сделать 1 класс события, указать в нём все свойства, которые могут быть необходимы для событий и устанавливать значения только для тех событий, которые будут нужны в каждом конкретно случае? Я, пока, склоняюсь ко 2-му способу, ведь, на сколько я понимаю, даже в MouseEvent сделано таким образом, что свойство delta доступно и при событиях CLICK, MOUSE_DOWN и т.п., хотя фактически оно необходимо только у события MOUSE_WHEEL. Но с другой стороны, все нюансы по работе событий будут известны мне, но другие люди, которым, возможно, придётся столкнуться с моими событиями, будут недоумевать, почему в одном случае есть информация об одних переменных, а в другом её нет. Вот такие вот дела. |
|
|||||
блогер
Регистрация: Jun 2005
Адрес: Господи пожалуйста не Новосибирск
Сообщений: 6,598
Записей в блоге: 17
|
Сомнительно.
А я дурак, я делаю одно событие с var info:Object={} куда пишу всё что сдумается. На самом деле просто посмотри, что ты там передаешь с событием. Например, количество игроков онлайн, открытые двери и год после рождества Христова. По сути, 3 разных переменных - totalOnline, openDoors, year, но ведь можно передать просто intValue, а в комментариях написать мол "а тут нам приходит..."
__________________
Тут мужик танцует и поёт про флэш |
|
|||||
Et cetera
Регистрация: Sep 2002
Сообщений: 30,784
|
Досточно public-ов. От геттеров проку нет, событие всё равно клонируется постоянно.
|
|
|||||
Клонируется то клонируется, но это при бабблинге или в разных обработчиках. Но ведь можно изменить данные, если кто-то его передиспатчит, или внутри одного обработчика, или при передаче ("по ссылке") куда-то.
|
|
|||||
Et cetera
Регистрация: Sep 2002
Сообщений: 30,784
|
И что? Если вы хотите наступить на грабли, вы на них наступите. Причем самостоятельно.
|
|
|||||
Регистрация: May 2009
Сообщений: 220
|
Цитата:
Цитата:
Если все правильно про клонирование, то как/когда это происходит при нативном всплытии события? Вот пример того, что наблюдаю я: package { import flash.display.Sprite; import flash.events.Event; public class Example extends Sprite { private var _event:MyEvent; function Example() { super(); var s1:Sprite = new Sprite(); var s2:Sprite = new Sprite(); var s3:Sprite = new Sprite(); super.addChild(s1); s1.addChild(s2); s2.addChild(s3); s1.addEventListener(Event.CHANGE, this._test1); s2.addEventListener(Event.CHANGE, this._test2); s3.dispatchEvent(new MyEvent(Event.CHANGE, true)); } private function _test1(e:MyEvent):void { trace(e.info); //10 trace(this._event === e); //true } private function _test2(e:MyEvent):void { trace(e.info); //5 e.info = 10; this._event = e; } } } package { import flash.events.Event; public class MyEvent extends Event { public var info:int; function MyEvent(type:String, bubbles:Boolean = false, info:int = 5, cancelable:Boolean = false) { super(type, bubbles, cancelable); this.info = info; } // монжно раскомментить - трейсы те же. /*override public function clone():Event { return new MyEvent(super.type, super.bubbles, 20) }*/ } } |
|
|||||
Регистрация: Jul 2007
Адрес: Россия, Москва
Сообщений: 522
|
2 PsyhoTiger:
Мне кажется ваш подход в корне не правилен. Цитата:
Плюс непонятные названия переменных будут усиливать неразбериху. 2 fljot: Цитата:
|
|
|||||
блогер
Регистрация: Jun 2005
Адрес: Господи пожалуйста не Новосибирск
Сообщений: 6,598
Записей в блоге: 17
|
Да.
Какие плюсы я вижу: типизация и использование одного события для многих задач. В коде: private function eventHandler(event:MyEvent):void{ //ожидаем с событием количество единиц дерева super.totalWood=event.intValue; } Я не говорю, что мой вариант лучший - но он вполне имеет право на жизнь. Но, как я уже сказал, я всё равно пользуюсь одним Object`ом )
__________________
Тут мужик танцует и поёт про флэш |
|
|||||
Регистрация: Jul 2007
Адрес: Россия, Москва
Сообщений: 522
|
Каждому — своё, но мне кажется, что вариант с object, в этом случае, не имеет права на жизнь (я понимаю, что это звучит категорично, но мне кажется, что хорошо когда нам компилятор будет сам подсказывать, к каким переменным можно обратиться, а к каким — нет + хорошие названия переменных улучшают читабельность кода).
Такие моменты, на мой взгляд, становятся важны когда работаешь в команде или создаёшь что-то, чем будут пользоваться другие люди, если работаешь один, то на это можно забить, но это не значит, что так нужно/следует поступать. |
Часовой пояс GMT +4, время: 07:57. |
|
« Предыдущая тема | Следующая тема » |
Теги |
flash , Лень , Проектирование , события |
|
|