[squeak-dev] A question on the builder pattern

Colin Putney cputney at wiresong.ca
Tue May 4 05:31:59 UTC 2010


On 2010-05-03, at 8:05 PM, Andreas Raab wrote:

> What I'm curious about is this: Which advantage does "form b" have over "form a"? Why would one choose it? Is it merely for convenience or are there other (practical or style) advantages?

Here's one thing that comes to mind: 

Form b doesn't use an intermediate representation in the form of spec classes. OmniBrowser uses this form: the model objects implement #buildOn:, which sends messages to a builder object. The builders never answer anything interesting to the model objects, they just take direction on how to build up the widget hierarchy. That keeps the whole thing quite light-weight - one builder class for each GUI library supported (Morphic, web and test), and everything is done in a single pass.

Now, OB is pretty simple compared to say, ToolBuilder - it only uses a narrow range of widgets, and they don't require very many parameters. And for some situations an intermediate representation might be useful; you can do transformations on it before producing the final output. But when that's *not* the case, I favour the simplicity of form b.

BTW, any discussion of builder protocols would be incomplete without mentioning Seaside. It has a pretty powerful builder interface for programmatically generating HTML. It's hybrid of forms b and c, with nested builders *and* scoped blocks. It's also the second version of the interface; the first version used a single builder with nested blocks.

Interesting observation.

Colin


More information about the Squeak-dev mailing list