Om, I know there is a lot(on this thread) but I already stated that my use case was on an application level and didn't really apply to a core framework.
Why? Because Using a mediator, it's view IS the component, it's already coupled. So going back to the original, having a SomethingType class for constants is an interface. Yeah having them ON the component is debatable and I might take that back since FlexJS is so heavily based on composition, I was referring to my custom composite components. Mike On Tue, May 19, 2015 at 1:33 PM, OmPrakash Muppirala <bigosma...@gmail.com> wrote: > On May 19, 2015 8:00 AM, "Alex Harui" <aha...@adobe.com> wrote: > > > > Some (many) thoughts on this: > > > > I considered event pooling in the current Flex SDK and have suggested > > pooling other objects in people’s apps at times in the past. Some folks > > claimed that instantiating lots of small objects fragmented memory and > > made the Flash Garbage Collector work harder. Flex does pool item > > renderers, but, IMO, more for instantiation time than GC impact. For > > sure, if I was running a 3D graphic simulation I would not want hiccups > on > > occasion to collect garbage. > > > > But at least for now, the FlexJS focus is on 2D applications, so I’d want > > to see if event instantiation is having a negative impact before > > implementing a pool. Also, since the root event dispatching for FlexJS > is > > implemented within the runtimes and I believe event.target is read-only, > > it is problematic to create a pool without causing other memory leaks. > > > > FWIW, the other way to optimize for event instantiation is to simply fire > > less events. In current Flex, lots of events are fired “just-in-case". > > With replaceable models and other parts in FlexJS, you should be able to > > replace parts with parts that only fire the events you are actually going > > to use if it turns out to be important. > > > > Another way to fire less events is to not use bubbling like I’ve seen > some > > folks do. Bubbling is an easy way to hoist an event up to a listener, > but > > breaks encapsulation and is the equivalent of shouting from the sidewalk > > to someone on the top floor of an apartment building. Bubbling is really > > intended for when the listener doesn’t know who is going to have > something > > to say, which is why Keyboard and Mouse events bubble, but for most > custom > > events, the better practice is to have each abstraction boundary dispatch > > an event that doesn’t bubble and has a unique semantic meaning, and have > > the one listener listen directly at the boundary. That’s like texting > the > > person on the top floor. Not everybody has to hear it. > > > > Separately, it looks like you like an API where you pass in a few > > parameters instead of an event instance. The JS side already does that > > and we could do that on the AS side. > > > > I couldn’t tell quickly whether Starling has only one Event class, but > I’d > > suggest we start with an Event with no data since that’s built in to the > > runtimes, then a ValueChangeEvent that has oldValue/newValue and add an > > EventWithData when we come up with a need for it. Also note that: > > > > MyClass(event.target).selectedIndex > > > > is type-checked by the compiler, where as > > > > event.data > > > > is probably not, so IMO, I’d recommend the former instead of passing the > > payload in a data field in most cases. > > > > And then, unlike Starling and current Flex which has dozens of constants > > declared on the Event class, I want to experiment with putting those > > constants on the class that dispatches the event. Having every constant > > on Event doesn’t scale well. When you get to 100’s of constants you > could > > be bringing in lots of strings that aren’t used and the documentation > gets > > unwieldy. Third-parties can’t be changing the Event class for their > > components so instead of creating subclasses of Event, why not just > > declare the constant on the same class that is dispatching it? > > This thread is moving too fast for me. I want to concentrate on this > point a bit now. > > The problem with declaring the constant on the same class that is > dispatching it is that it would create an unnecessary compile time > dependency between the class that is dispatching the event and the class > that is listening to it. I think having classes loosely coupled via > events is a good thing. Is it bad OO practise? I think that is > debatable. But, this is truly where the power of event driven applications > lies in. > > I usually organize my shared components in a library project, then create > one or multiple app projects that compose these components as needed. > > I could have two different view component dispatch a 'dateRangeChanged' > event with the same payload of an array of dates. In my listening class, I > dont want to have to deal with having Component1.DATE_RANGE_CHANGED vs. > Component2.DATE_RANGE_CHANGED > vs. any other additional view components that may be built in the future. > > The same way, I can bubble up the event from my view component and add a > listener on a ancestor higher up in the view heirarchy so that I dont have > worry about the type of component that dispatched the particular event. > > Micro-frameworks like PureMVC, etc. try to solve this problem by creating a > Notifications.as class and list every event (notification) name in that > class. This would probably be the only additional dependency needed, > rather than depending on the classes that dispatch the events. > > Thanks, > Om > > > > > Regarding where and how the JavaScript line is, I’m not quite sure what > > pieces of information you are looking for, but consider this: the goal > of > > FlexJS is to produce an optimal HTML/JS/CSS app, not an optimal SWF. So > I > > will sacrifice a bit of being more like current Flex for using different > > APIs to make the final cross-compiled output run better. Thus, at the > > lowest level, I’m going to try to leverage HTMLElements, CSS, and > > EventDispatchers built into the browsers rather than layering code on top > > of it. IMO, you can always sacrifice performance and add layers on top > of > > your low-level, but the problem with current Flex is that there is no > > low-level below the 13,000 lines of UIComponent and the nearly 200K of > SWF > > bytecode it is hard-coded to bring in. The composition-orientation of > the > > framework should allow you to build up things into higher levels where > you > > need them, but allow for optimization, replacement, testing, mocking, etc > > of individual pieces. > > > > Finally, here’s the layout wiki page: > > https://cwiki.apache.org/confluence/display/FLEX/FlexJS+Layout > > > > HTH, > > -Alex > > > > On 5/19/15, 5:41 AM, "Michael Schmalle" <teotigraphix...@gmail.com> > wrote: > > > > >So are you saying Starling traded a bit of performance in event > > >dispatching > > >to get object pools? Or was is that they needed to implement bubbling of > > >their own display list, so they sacrificed performance. > > > > > >Mike > > > > > >On Tue, May 19, 2015 at 8:32 AM, Kessler CTR Mark J < > > >mark.kessler....@usmc.mil> wrote: > > > > > >> Just a side bar on this. I believe a concern about using the > > >> eventdispatcher like the one in starling was that it was slower than > > >>one we > > >> use from flash.events. It had to do with the fact the player was > > >>managing > > >> the events vs using an actionscript driven one. Bumped into that when > I > > >> explored managing the lists of the active events and I even made > single > > >> serving events that would remove themselves after one call. > > >> > > >> > > >> -Mark > > >> > > >> > > >> -----Original Message----- > > >> From: Michael Schmalle [mailto:teotigraphix...@gmail.com] > > >> Sent: Tuesday, May 19, 2015 6:30 AM > > >> To: dev@flex.apache.org > > >> Subject: Re: [FlexJS] Event names > > >> > > >> NOTE: I forgot to say that in the EventManager in the component > > >>framework > > >> can do it; > > >> > > >> > > >> > > >> > https://github.com/Gamua/Starling-Framework/blob/master/starling/src/star > > >>ling/events/EventDispatcher.as > > >> > > >> See the method invokeEvent(), line 140. In a way, this makes the need > > >>for a > > >> subclassed Event obsolete, the data IS the payload which can be a > > >>primitive > > >> value or vo/struct class. > > >> > > >> The client knows what it needs. > > >> > > >> Mike > > >> > > >