Even without knowing much about your particular business domain, it does sound very wrong to have the User
class as a sort of God aggregate with everything else underneath it.
Grouping your entities into larger ones with an aggregate root is completely up to how your business works. For instance, PhotoGallery
could be an aggregate root with many Photo
objects underneath it, or both PhotoGallery
and Photo
could both be separate aggregate roots.
For example you might run a photo development company, where photos are always collected, handled and processed as a complete PhotoGallery
(1 aggregate root).
Or you might run a social networking site, where a Photo
can be shared and used commonly without needing to load the whole gallery (2 aggregate roots).
So it's really up to you and what your business domain dictates. You can always suck-it-and-see, try things one way and see how it goes, then refactor later.