All,
I am struggling to identify the bounded contexts in a Facebook-like domain. Below, I've provided a braindump of a lot of the high-level nouns and how they relate to each other.
My problem is that the domain is very User-centric. It is fair to say that the User is the heart of the core domain, and while I easily see subdomains and the aggregates that would comprise it all, the only additional bound context that I am really seeing is at the bottom-left of the image. An User is a generalization of an Account, as is an Administrator. The role of an Administrator would allow for that person to essentially edit and delete any content, as well as dole out Suspensions for Users, as needed. There are a few things that could be added there, as well - such as a means for various types of content to be reported, and a means for the Administrator to see what has been reported. Needless to say, those aspects still need to be expanded on.
I am leaning towards the fact that this is simply on large bounded context, ultimately - only because I am not seeing any delineation. Based on the responsibility of the Administrator, I would essentially have to mirror the entire core domain, and just add a couple of smaller concepts. Additionally, there is are a lot of implied relationships that I omitted from the image, just for the sake of clarity. Everyone who uses social networking will see them, i.e. notifications are generated by comments and reactions, as well as new messages in a conversation, or recieving a relationship request, etc.
On the other hand, however, I do want to see some level of isolation between the availability of commands that could be sent - at least in terms of making sure that the primary UI implementation (non-admin, user-facing) is not calling into administrative commands. I could enforce this by how I package the commands, I reckon - but that is also what makes me think that I am missing something. Perhaps what I am looking for is a Shared Kernel? When it comes to the point of persistence, ultimately, I would likely want to have not just the commands isolated, but also the repositories.
Any thoughts? Not sure if I am just missing something, or am trying to make this harder than it is.
Thanks!