Hello all I am having a few ideas concerning extending Cayenne and I would like to hear your comments. Probably some of these ideas already would be possible or some were discussed before? Would they be difficult to implement? Are there others interested in such extensions?
- Typed Keys: Primary keys are generated for all DataObjects and it would be possible to use typed keys while programming. (The fill method in the table module extension below could be called with a typed key lowering the possibility of coding/conversion errors.) - Implementation of Table Data Gateway design pattern: The process to load and persist data is managed in a typed gateway class so that it would be possible to rewrite or add "elements" of a query (think about filling a logical unmapped field on a DataObject with a subquery). I know I could do something like this with callbacks. But with callbacks I can't extend the query for a performant loading of records. - Implementation of Table Module design pattern: Currently DataObjects are a mixture between a "Data Row" and a "Table Module". The idea of a typed table module per DataObject is that business logic for all rows would be put into the table module and logic for one row would be put into the row (table module: fill, fillbyforeignkey, persist. data object: row validation). Above extensions would require some changes to the ObjectContext (it should know the loaded table modules) and on other core elements of Cayenne. Would that be a problem for others or result in many side effects? And: I am currently thinking about completely remodeling DataViews. One of the ideas I have is that the UI could be built from an XML definition which is transformed into an object tree. That object tree could be used by a renderer to generate a Swing interface, an xsl-fo tree (for PDF generation) or HTML (for webapps). Have you ever thought about something like this? Thanks for your comments. Regards, Adrian
