[Jeff Childers]
I'm starting to get the "big picture" but I'm still a little fuzzy on the details, particularly about objects and the ZODB. I'm hoping that someone can give me some brief pointers to where the answers the these questions lie. I have read a *bunch* of Zope doc and I'm pretty handy with Python.
1) Where are data object classes defined in Zope?
I'm fairly new to Zope, although I've written some Zope Products. My sense is that there are two answers to your question: * ZClasses * Products and that the best bet in the long-run, especially if you feel comfortable with Python, is to skip ZClasses altogether and focus on grokking Products.
I get the persistent object thing. Very cool. So let's say I want to write a billing system. I have customer objects, invoice objects, and payment objects. [ Customer [ Invoices [Payments] ] ].
My guess is that you'd write a Product, BillingSystem. The BillingSystem Product would include a variety of classes: * A top-level container; e.g., Billing * Customer * Invoice * Payment Only the top-level container would be addable to other Zope containers (folderish objects). Once you adding an instance of Billing, it would have a slightly customized manage_main (I'm probably misspelling that). From Billing's manage_main, you could add Customers. From a Customer's management screens, you could add Invoices. And so on.
a) Where do I put the code that defines each custom class? Scripts seem to be for def-functions. Do I have to put this outside Zope?
Yes, that's your best bet. The common wisdom seems to be: Write this as if it's just Python, then add a light wrapper for Zope. Of course, the devil can sometimes be in the details.
b) Do I use ZCatalogs to 'index' my objects so I can query them similar to SQL? If so, how/where do I add my custom classes to the ZCatalog?
Good question.
2) How do I instantiate and persist (through the session) a particular instance of the class from the ZODB (i.e. a certain customer)?
The thing about PersistentObject is that you don't really have to do anything for it to persist aside from instantiating it in Zope. Isn't that cool?
I realize these are big questions. Any pointer toward answers, even which documentation I should be reading, would be helpful and greatly appreciated.
I think the short answer is that you want to investigate Products. I'm hoping someone more knowledgeable about the specifics follows up. Cheers, // m -