The current model is very tightly coupled with inter-related classes directly referencing each other to build a fairly complex model graph. This approach makes providing a mixed persistence mode very difficult. This proposal attempts to rectify the situation by defining "verticals" within the object model that can remain tightly coupled but using ids to reference "horizontal" objects. This coupling also affects how objects should be persisted/acted-on as groups. Along with the entities below the () contain the service and repository objects that will manage the items.
Verticals
Page (PageService, PageRepository)
- Page
- Region
- RegionWidget
- RegionWidgetPreference
- PageUser
Page Prototyping
- PageTemplate (PageTemplateService, PageTemplateRepository)
- PageTemplateRegion (PageTemplateService, PageTemplateRepository)
- PageTemplateWidget (PageTemplateService, PageTemplateRepository)
Page Rendering
- PageLayout (PageLayoutService, PageLayoutRepository)
Widget (WidgetService, WidgetRepository)
- Widget
- WidgetComment
- WidgetRating
- WidgetTag
- Tag
- Category (CategoryService, CategoryRepository)
Person (PersonService, PersonRepository)
- Person
- PersonProperty
- Address
- Organization
User
- User (UserService, UserRepository)
- ApplicationData (UserService, UserRepository)
- Authority (AuthorityService, AuthorityRepository)
System
- PortalPreference (PortalPreferenceService, PortalPreferenceRepository)
OAuth
- OAuthConsumerStore
- OAuthTokenInfo
Groups (GroupService, GroupRepository)
- Group