I don't think PAYG is always obvious and I continue to struggle with the
question. Some examples:

a. Anything that can be expressed as a style probably does not need a
bead, unless the style is not native to the platform. Border and
backgroundColor are good examples. These are built into HTML, but not the
Flash Player. So the border and background styles are implemented as beads
but they are only available on the Flash Player platform. Width, height,
x, y, etc. are also styles in HTML but properties in Flash, so they don't
need beads either. Plus they are pretty fundamental to UI systems.

b. Completeness also gives me pangs. You would think that a slider's basic
properties of a minimum value, maximum value, and a current value would
not need to be questioned. And that's true, as properties they are
necessary to define a slider. But should a slider emit an event whenever
its min, max, or value changes? Many apps will just go get the current
value when they need it. The slider's mouse controller observes the
dynamic changes in the thumb position and emits an event for each movement
- but not everyone needs that so such a controller could be optional, but
without a controller, you can't actually change the thumb with the mouse
so you need the controller regardless, but do you need to emit the event
when the thumb is being moved?

c. When you do have to have something, like a slider mouse controller, to
make the component work at its basic level, do you make an option as to
whether or not to emit the event or do you have one controller that emits
events as the thumb moves and one controller that does not emit the event?
Is one controller a subclass of the other or a duplicate version?

d. Its often difficult to tell if something should be present just because
it always has been present (in Flex). When you have a set of properties
and events, we need to ask if those are essential to making the component
work. Or rather, what is the component's default behavior. For a text
input component, the default because is accepting keyboard input, without
filtering. Making it a secure input with a mask, is extra work/behavior
and thus becomes a bead. Beads enhance and augment the default behavior as
a rule of thumb.

PAYG for me, raises lots of questions about programming practices and
patterns. Do you make it easier on developers by packaging common
properties/events/options even if some are not used that often, or do you
break them down into many versions?

One way to handle this is by looking at the Express project. There, the
most commonly used patterns are put together. For instance, data binding
is in everything. Or you might have the slider always emit every event it
can. 

The Basic project should be the bare-bones components with lots of options
as beads. Then package them into common use cases and put that into
another project, like Express, to make it more palatable.

I would argue (just a little) that more complex components, like DataGrid,
and perhaps even NumericStepper, should be in a project that lives between
Basic and Express. This would leave Basic being very, well, basic (label,
button, text input, group and container for instance).

I hope that helps a little.

‹peter

On 6/7/17, 1:27 AM, "Justin Mclean" <jus...@classsoftware.com> wrote:

>Hi,
>
>> I agree that there could be a even smaller bead that doesn't track
>>changes
>> as you move the thumb.  Something to do in the next release, IMO.
>
>Could be or must be? Again just trying to understand why PAYG wasn¹t
>followed in this case.
>
>Was this just an accidental design omission that no body picked up on it
>OR is it sometimes OK to have optional feature code in beads?
>
>Thanks,
>Justin

Reply via email to