Daniel,  I don't have a definitive answer for you.  I took an interest to
browse what was built into Pharo (using Tools > Finder > Classes and
searching for "stream" and also for "read") and looking at the hierarchy of
several results it seems there is a mix.  I suppose the fall back position
is "do the simplest thing that works."


On Sun, Jan 18, 2015 at 1:11 PM, Daniel Lyons <fus...@storytotell.org>
wrote:

> This is an OO design question.
>
> For my task, I have some objects and a particular file format that encodes
> them. I want to be able to read the file and create those objects. The
> Stream API seems like the right way to do this, but I'm not sure how to
> encapsulate my code. I see these options:
>
>  • Create a new class (subclass of Object) that implements #next to return
> the next object in some underlying stream.
>
> Pro: very simple, one place with all the code. Con: what about the rest of
> the Stream and/or Collection APIs? Is it wise to delegate everything else
> to the underlying stream with #doesNotUnderstand:?
>


ImageReadWriter seems an example of this - but I don't think it delegates
#doesNotUnderstand:  - it looks like it implements the full protocol in the
"stream access" protocol. It has an instance variable /stream/ that it
forwards                  t




>
>  • Create a new class, subclass of Stream, that implements #next like the
> above.
>
> Pro: still pretty simple, not sure what is needed to implement the API
> completely (I did add a method #atEnd). Con: not sure if more methods are
> missing; unclear about initialization (overrode class>>#on: to call
> #basicNew). This seems close to the right approach but I'm unsure.
>
>  • Create a method #nextFoo on the existing Stream class.
>


JPEGReadStream and TxCharacterStream seem examples of this.

 cheers -ben



> Pro: very simple—no new class. Con: nextFoo doesn't integrate well with
> the rest of the API (#do: for instance), not sure this is clean or wise.
>
>  • Ignore the Stream classes altogether.
>
> Pro: No chance of misundestanding. :) Con: everything else.
>
> Advice?
>
> Thanks for your time,
>
> —
> Daniel Lyons
>
>
>
>
>

Reply via email to