I need help understanding the underlying LCDS mechanisms when a complex object hierarchy is managed in LCDS. I have a custom Assembler because I have specialized persistence requirements. My object hierarchy is basically the following:
Document is the [Managed] class. When a new Document is created, it is initialized with a Chapter. Pages and Text are created when the document is edited. I create new instance of Document and initialize it with an instance of Chapter. On the client, I invoke the DataService using the createItem method. My custom Assembler is called, I do the necessary persistence operation and return. Back on the client I receive the ItemReference containing the AS Document. This all works ok. I am now faced with the runtime operations when the user starts creating Chapters, Pages and entering text.
Given that I start the editing session with a single ItemReference, I don't understand how to handle the Document sub-tree. The LCDS documentation says the purpose of the [Managed] class tag is so the entire object tree does not need to be transmitted when a property changes on a child object. Its the responsibility of the sub class to keep the remote object in sync. But, I don't know the best way to go about doing this.
The [Managed] annotation makes the properties of the managed class bindable. I can add an event listener to the ItemReference to handle property changes on the Document, but what about the rest of the object tree? Do I explicitly make the properties of the child objects bindable? Do I make each parent object an event listener for its child object properties and propagate the event up the tree?
Any suggestions or patterns to make this a little more understandable would be greatly appreciated.
Hmm. I am not using Model driven. I hand-crafted everything including my custom assembler. When I create a Document what is returned, of course, is an ItemReference containing the created Document (the Managed class) along with some sub-parts. What is puzzling is how to get ItemReferences for all the sub-parts I want to change and have sync'd. I know I have to invoke a createItem when something doesn't exist, but there is a lot of getItem calls for any client interested in changes to any one part.
Either its just a lot of unavoidable work, or I am missing something really, really easy.
Like I said, I didn't look at the Model driven approach. I recall something I read made me think it wasn't right for me. Perhaps its because my persistence store is a content repository ala Jackrabbit.