[squeak-dev] Re: Gofer versus Installer

Andreas Raab andreas.raab at gmx.de
Thu Dec 16 18:13:35 UTC 2010


On 12/16/2010 9:20 AM, Eliot Miranda wrote:
> How about a class comment that gives an overview of intended usage, plus
> an example or two, and sketches the API?

(HTTPSocket httpGet: 'http://www.lukas-renggli.ch/blog/gofer')
	copyReplaceAll: 'Gofer' with: 'Goofy'.

:-))


Cheers,
   - Andreas

> pant, pant.
>
> Eliot
>
> On Wed, Dec 15, 2010 at 11:19 PM, Andreas Raab <andreas.raab at gmx.de
> <mailto:andreas.raab at gmx.de>> wrote:
>
>     Folks -
>
>     To illustrate my point about Gofer being an API, here is an
>     implementation of the same API. Gofer's little brother -called
>     Goofy- provides an implementation of the Gofer API but it's a bit
>     simpler and comes in a single class (with a total of 400 LOC or so).
>     It passes most of the Gofer tests.
>
>     The exercise was actually interesting since it points out several
>     things that are just plain broken from the Monticello perspective. I
>     just posted a fix for the first issue - a way to get versions and
>     names in a consistent way from different repositories. Clearly a
>     thing that should be in Monticello.
>
>     Another interesting issue is some of the cleanup that is in Gofer
>     and pretty much directly replicated in Goofy's #cleanoutWorkingCopy:
>     #unloadWorkingCopy: and #unregisterRepositories:. These are all
>     things that need to be folded into MCWorkingCopy but I'll leave that
>     for another day since I'm a bit tired right now and don't want to
>     accidentally break MC in the process :-)
>
>     In any case, if you look at Goofy I think you'll see the API much
>     more clearly. It's a good API, but it doesn't need to be spread out
>     amongst some 20-something classes.
>
>     Cheers,
>       - Andreas
>
>     On 12/15/2010 9:54 AM, Andreas Raab wrote:
>
>         On 12/15/2010 9:21 AM, Chris Muller wrote:
>
>             One question that came to my mind last night: What does>
>             1000 lines
>             of Gofer code bring to Monticello-loading that I can't
>             already do with
>             just Monticello? or with a couple of facade methods added to
>             plain
>             MC?
>
>
>         I spent the evening yesterday to look at Gofer in detail and it
>         is what
>         led me to say that Gofer is really an API to Monticello, not an
>         installer. First, there is nothing in there that should not be
>         part of
>         Monticello proper; contrary to Installer and Metacello I would
>         expect
>         all the stuff that is in Gofer to be readily available in Monticello
>         itself. Gofer is simply a good facade to Monticello with a
>         useful API.
>
>         Secondly, much of the code in Gofer comes from the "command
>         pattern gone
>         wild" problem. Gofer simply overuses the command pattern. Every
>         operation is wrapped in a separate class without any need for
>         doing so.
>         As a consequence, things that should be a simple "self foo" become
>         unnecessarily complex in creation, setup, and execution. If you
>         would
>         take this out, it would reduce Gofer to 5 classes or so and the
>         total
>         code size by a significant amount while improving clarity.
>
>         As an API to Monticello, Gofer is very nice and we should
>         standardize on
>         it. But as a "replacement" for Installer it's not even in the same
>         ballpark.
>
>         Cheers,
>         - Andreas
>
>
>
>
>
>
>
>
>
>




More information about the Squeak-dev mailing list