[Zope3-Users] newbie design questions for UI to external data

Gary Poster gary at zope.com
Tue Feb 14 11:11:44 EST 2006


On Feb 13, 2006, at 10:33 PM, Shaun Cutts wrote:

> Um...
>
> I guess I must have asked too many questions at once :)

:-) and this is still a bit much for me.

> I've implemented
> a first pass of a container for external data and got it working on  
> some
> of my collections.
>
> I've included the (first pass of the) base DBContainer and DBContained
> objects for criticism, and would be very grateful if anyone would like
> to take a crack at it.

It looks like an interesting approach--more low-level than I would  
have expected for a first cut, and *maybe* more low-level than  
necessary.  I wish I had more time to look at it.

> Keep in mind, this is my first time working with the system, so I'm  
> sure
> I'm going about some things the wrong way. In particular, I already
> think:
>
> 1) Instead of have the contained object update the container, I should
> rely on the event notification system.

Events are a tool for disconnected notification.  calling a method on  
an object is sending a message directly to the interested party.  Not  
everything should be an event.  If a communication between two  
components is a core aspect of your design, maybe direct method calls  
are more appropriate.

> 2) Right now, the system works by translating objects "at the border"
> (in IExternalContainer). Some translation is necessary, for  
> instance, to
> move from mx.DateTime to datetime.datetime, but still I think I should
> somehow be making use of the "adaptor" interface.

If there's not an object to adapt then you have to start somewhere.   
My glance at the code seemed to show that you were making a  
reasonable choice.  Another approach might be to have an abstract  
"row" object that could represent any columns (a dict or something),  
and named adapters registered for the row interface plus the name of  
the generating table.  I dunno, do what your app needs and refine it  
as you discover what works.

> 3) Along these same lines, IDBContainer._containedType should  
> really be
> an interface (Object( schema = IDBContained ))
>
> Note: is there a tutorial on writing containers anywhere I should have
> read? I mainly figured this out by banging on it and fishing around in
> the code. I'd love to figure out, for instance, what is really  
> happening
> with the traversals (with some interaction diagrams). I do think it  
> was
> harder than it should have been. (But, then again, I think that about
> most things...:))

Don't know of a tutorial.  Sounds like you are interested in  
traversal, though, which is different.   Look at zope.app.traversing,  
or zope.app.container.traversal.  The headline is that there are two  
kinds of traversal: URL path traversal and TALES path traversal.   
They have different adapters.

> BTW in my humble opinion, ILocation.__name__ is not well named. When I
> first got an error referring to __name__ I thought it was expecting a
> class object. And what happens when, for some strange reason, someone
> wants to put a class in a container, and doesn't like its default  
> name?

Not sure if that's a real use case for an ILocation.

That said, it's a reasonable POV to say that Zope shouldn't claim  
__*__ names.  But we do, so, well, yeah, we do. ;-)

Gary


More information about the Zope3-users mailing list