I'm working on refactoring the widget tree as part of the model-split Matt's sent a few notes on. After spending some time in the code I would like to propose that we make the object model more one-way. By that I mean, in the interfaces, a Widget would have a collection of WidgetTags but the WidgetTag wouldn't have a reference back up to the Widget (for example). The driving reason I'm proposing this is that with the two way linkage the objects can get out of sync. For example, I can create a WidgetTag for widgetId 2 but put it in the collection of widgetId 1. With just the JPA model this wasn't a huge deal because it handled that on the back end but I don't think it's the right choice when designing a generic interface model (my opinion obviously). The "child" should be automatically associated with the parent it resides in.
The only real major side effect is that since items like WidgetTag would be dependent on their parent widget it doesn't make sense to have the WigetTagSevice/Repository objects. Those functions would be rolled into the WidgetService/Repository. Personally, I think this will simplify things but I want to make sure everyone else agrees this is a good move. Let me know what you think. Thanks, Chris
