[Pharo-project] About SimpleMorphic

Nicolas Cellier nicolas.cellier.aka.nice at gmail.com
Sun Nov 7 20:17:31 CET 2010


2010/11/7 Igor Stasenko <siguctua at gmail.com>:
>> Talking about complexity, let's take for example, morph layout. This is
>> started with #doLayoutIn: in Pharo and #doLayoutIfNeeded in SimpleMorphic.
>>
>> In Pharo, this method calls #adjustLayoutBounds: (19), #layout:in: (149),
>> #layoutProportionallyIn: (10), #computeCellArrangement:in:horizontal:target:
>> (87), #computeGlobalCellArrangement:in:horizontal:wrap:spacing: (31),
>> #computeCellSizes:in:horizontal: (30),
>> #computeExtraSpacing:in:horizontal:target: (136), #layoutLeftToRight:in:
>> (91), #layoutTopToBottom:in: (91), #placeCells:in:horizontal:target: (70).
>> The numbers in parenthesis are the sum of the lines of code of the
>> implementors. Total lines of code for layout (taking only these most
>> important methods) is 714. I doubt there are many people who really
>> understand all of this code.
>>
>> In SimpleMorphic (Cuis), this calls #layoutSubmorphsIn: (10),
>> #applyLayoutFrameIn: (11), #layout:in: (24). Total lines of code is 45. I
>> believe any smalltalker could understand these in just minutes.
>>
>
> Indeed, a morphic layout logic always felt overly complicated to me.
> It hard, because you don't know,
> if you can remove/replace anything from there and still have a working
> code. Good to see that you have managed to deal with that.
>

The question that immediately arises from such complexity is :
- what are the features we want to implement ?

If we are not able to provide an answer, that means we can't even
write tests, and that also means we can't modify/refactor the code.
In such case, we tend to write more code outside existing one and so
doing are just making things worse (more code more complexity).

I suspect (but I did not check) that Juan's work in Cuis is the best
thing to do in such case.
While at it, we should also write tests now that we have testable features.

Nicolas




More information about the Pharo-project mailing list