On Wed, 2008-09-10 at 11:49 +0200, Philip Van Hoof wrote:

> have been trying to explain us that a class must
> be good at doing one thing ... but only one thing. 

I mis worded this, it's rather

"being good at being one thing" not "being good at doing one thing".
It's small difference in words, but if of course has a different
meaning.

Of course can a class do more than one thing. Just like how a horse can
both run and memorize.

> A class must not try to solve the world.

Just like a horse wont solve the world, yet it's good at being a horse

My point is:

A thumbnailer must be good at being a thumbnailer.

A thumbnailer must not try to be good at being both a generic resizer
and a thumbnailer.

A thumbnailer could consume a generic resizer, to avoid said code
duplication. Of course. But that's still two different classes of
things.


So:

public interface Resizable {
        public string mime_type;
}

public interface Resizer {
        pixmap resize (Resizable r, int width, int height)
}

public class ImageResizer : Resizer {

        public pixmap resize (Resizable r) {

                Requires {
                        typeof (r) extends (Image)
                }


        }
}

public interface Thumbnailer {

        HashTable <string, Resizer> performers;

        public void Queue (Resizable r) {

                pixmap = performers[r.mime_type].resize (r, 256, 256)
                save (pixmap, large_path)

                pixmap = performers[r.mime_type].resize (r, 128, 128)
                save (pixmap, normal_path)

        }
}

And not:

public interface Thumbnailer {
  public void Queue (Resizable r, int width, int height, out pixmap p) {

        // Required magic if-then-else, making decisions 
        // behind your back

        if (width < 256) {
                do thumbnailing
                p = get_from_image (thumbnail_path)
        } else {
                do resizing
                p = get_from_memory ()
        }
                        
  }

}


-- 
Philip Van Hoof, freelance software developer
home: me at pvanhoof dot be 
gnome: pvanhoof at gnome dot org 
http://pvanhoof.be/blog
http://codeminded.be




_______________________________________________
xdg mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/xdg

Reply via email to