Michael Bernstein wrote:
Make sure that each large attribute is an instance of a class that derives from Persistent.
Ok, I'll give that a try. Since Photo is a Python Product, what will happen to current instances if I make this (and only this) change?
I don't know. I can think of reasons that it might be ok. I can also rationalize why it would cause badness. :-)
[[ put images in their own specialist ]
I'm not certain that that makes sense, since the Images are really cached 'views' of the Photo object. When a new image is uploded to replace an existing one, *all* versions (thumbnails, small, medium, large, etc) are regenerated.
Makes sense to me. You're not generating them on the fly; you're storing them persistently. If you put them in their own Specialist and Rack or Racks, you get to say how they are stored entirely independently of how the Photo objects are stored. I would have just one Images specialist, and then probably store them in different racks, but expose them to the rest of the application as all being of the same class of Image, but with a different image_size attribute; either "thumbnail", "small", "medium" or "large". That way, I could make the small rack generate thumbnails from the medium rack if, for example, the small size was rarely requested. There are many ways to design that though, and it depends on how you want things to work. (Obviously :-) )
But assuming that I went so far as to break out the Images to their own Rack, would you reccomend that each image size have a dedicated Rack, or would you suggest that all images be stored in the same Rack?
There are advantages and disadvantages to each approach. However, you should be hiding the details of what Racks exist behind the facade of the Specialist. The Specialist will have a getItem method, which will get an Image from the appropriate rack, and probably some methods like listImagesFor(photo) and getImageFor(image_type, photo) so you can get all the images for a particular photo. Perhaps also storeImageFor(photo, original_image), which would end up processing and storing images derived from the original image. -- Steve Alexander Software Engineer Cat-Box limited http://www.cat-box.net