Some more bashing today.. (don't take it personal, i may be wrong)

BlPath hierarchy.. and BlShape.

Why you redefining what is shape and what is path?
Of course, you are free to do it in Bloc..
But in terms of Athens, all of BlPath are actually - shapes..
And BlShape is some kind of encapsulation of shape, paints and transform.
It is a dumb state holder without any extra logic.

My rule of thumb: do not produce dumb state holders. They has to be smart,
else it makes no sense in creating separate entity and designating it as
something else than any other bunch of data thrown into single clump,
sitting there deaf, blind, dead and silent until someone else will grab it
somewhere
and start using it for own purpose.

Sure, i could understand, why you potentially may want such object(s)
around,
but it is not shape anymore and i wouldn't call it like that. Because shape
are shape, and has nothing to do with paints and transform,
it don't knows and don't cares whether it will be filled or stroked or both,
 and how many times, and if there will be single paint or thousand.
Such kind of properties is simply orthogonal to what shape existing for,
because it exists only to define geometry.

I think all of that came from not understanding the roles of objects and
how they interact in Athens.

Shapes define geometry.
Paints define how that geometry will be filled/altered.
The shapes and paints are related in a way that paints are used to fill
shapes. But there's nothing tells that single shape can be  filled only
once with prescribed paint, and only then stroked.. or vise versa.
The order and amount of operations, combinations and effects are up to the
user. And they have to stay like so, if you don't intend to shrink feature
set and hardwire, what users can do and what they cannot.
I really hoping that you had no such intent.


Be on your place, if you want to have a number of commonly used shapes,
just make a
factory class, so i can tell:

CommonShapes rectangle: a@b to: c@d

except, that Rectangle is a shape already.. and wrapping it with own class
just adds more complexity, creating one extra beloved dumb state holder and
nothing else.

But i would imagine i could have:

CommonShapes circle: 100@100
or
CommonShapes roundedRectangle: 100@100 radius: 5

in any case, since there could be infinite number of 'possibly useful
objects'
when we talking about geometry.. your BlPath hierarchy will tend to grow
and grow over time, ad infinity.
Well, people love when there's order, like in that comic where guy painted
'cat' label on his cat, 'car' label on his car.. and all around in same
way.
Can't blame for that.. So, maybe. Whatever..

But your examples demonstating insane amount of bloat..

For example:

exampleLine
self new
layoutStrategy: BlLinearLayout horizontal;
layoutParamsDo: [ :lp |
lp horizontal wrapContent.
lp vertical wrapContent ];
addChild:(self new
layoutParams: BlLinearLayoutParams new;
shape:
(BlShape new
fillPaint: (BlColorPaint new color: (Color blue alpha: 0.5));
strokePaint:
(BlStrokePaint new
paint: (BlColorPaint new color: (Color green alpha: 1));
lineStyle: BlStrokeLineStyle new;
width: 5);
path: (BlLinePath new));
extent: 400 @ 200);
openInWorld


Guys, are you serious, you will find happy users, that is forced to produce
so much
code in order to draw a single, simple line on the screen?
You must be kidding.

I see that it is indeed comes from the requirement that BlElement can
hot-swap its shape on the fly.. And so, you are forced to define all the
properties
and construct all the things in place.
But there should be some sanity limit, where you should stop asking user
for
so much details.

But if you want to go to such extreme, then all your examples would look
like that:

BlElement new
content: (MyFancyPony new);
openInWorld.

Where MyFancyPony, is a content - an object that defines shape, and knows
how to render itself and so on. A smart object, that knows how to behave
and draw itself. Not just holding state.
 And number of properties and/or behavior
is then up to the user. And he is free to use anything fancy or not to
deliver content on the screen.

That would be much better. But then it will duplicate the features of
BlElement (or at least a significant subset of it) - being able to render
itself.
But still.

P.S. Now i see BlElement.. why nobody said that it is replacement for Morph?
I was thinking that in addition to BlMorph, you have BlElement :)
Sure, you don't need two compositions. As long as there one thing that
represent UI elements, that can form hierarchy its ok.
So, i retract my comments about Elements.. And apologize.

-- 
Best regards,
Igor Stasenko.

Reply via email to