Consider the following situation. There is a group of people working on a task (for example, editing a map). Any person is allowed to see the whole map. Every person is considered to be the owner of a certain piece of map they created. If person A created piece of map MA, and person B wants to change that piece, they can edit it locally and then can offer their changes to A. If A accepts the changes, the new MA is distributed to the whole team. B is not allowed to submit changes to MA themselves by definition.
As you can see, it's some sort of collaborative or distributed editing, where every bit of the task has an owner, and others may offer changes, which then should be propagated.
Since I have 0 knowledge about how to properly design a system and which rules should be applied (and our course has 0 material on that as well, which is weird indeed, but that's how it is - meaning, "go figure out yourself"), I would like to ask your opinion on the subject:
- what is the general class of such systems called in software design?
- which styles and patterns should be used in systems like this?
I'm 100% sure that this has been designed before, and that there is a correct implementation that one should use.
P.S. I sincerely hope that this is not going to be closed as homework, since a) I'm not asking you to do it for me, only advice or opinion and b) this is about the only place where I can ask for advice on this topic.
P.P.S. I strongly believe that there are strict rules in OO analysis and design and strict criteria to measure design correctness, hence why I don't want to just make up some random "design" with 0 knowledge, but rather to know how to approach things correctly in the first place. Thank you for understanding.