Suppose I have a class Calendar that mirrors a server-side class (we're not really working with Calendars, but I think this is a reasonably good and simple analogy):
class Calendar { public var appointments:ArrayCollection; /* other stuff */ } Then I want users to be able to edit and save the Calendar: I have a CalendarEditor. Editing a Calendar is moderately complicated (e.g., adding, removing, or editing Appointments), so I want explicit save/cancel steps. When editing something really simple, this is not really a problem--when the user saves, I propagate the view state to the object; when she hits cancel, I don't do anything. However, the Calendar determines what combination of Appointments is valid (they can't overlap), and the Calendar is the dataProvider of the CalendarEditor, so I can't fully validate a combination of Appointments without adding them to the Calendar. This means I actually need to add the appointments to the Calendar before it is saved so that they can be (a) validated in combination and (b) used to update the view while the edit is in progress. This makes save/cancel steps trickier: do I (1) Clone the Calendar (and therefore have it provide a clone() method) when assigned in the dataProvider, modify the clone, and assign the dataProvider reference when the user hits save. (2) Clone the Calendar as above, but have the Editor modify the original, and restore the clone in case the user cancels. (3) Something more clever? The problem with (1) is that cloning may be somewhat complicated, and it "feels" ugly to have the Editor update the dataProvider reference (instead of modifying the actual object that was set as the data provider). (2) hits the same issue. Perhaps the solution is to maintain a private clone, and copy back the state on save? Or is the right answer here that the model should not expect that the editor will update the object it set as the dataProvider, but should instead expect an update through a mechanism like a Mate map? Any thoughts? (Please keep in mind that my experience with MVC frameworks is unfortunately minimal, though I'm looking into Mate right now). Thanks, Maciek