When I first started working with DDD, I also struggled with organizing Context + Domain + Module + Model.
DDD is really designed to create models of your domain. As soon as I stop trying to subordinate my Contexts and faces, and began to think about what really is shared between entities, everything became better combined.
I actually do not use contexts, unless it is a completely different application (app = context). Just my preference. But I have modules that use only common points and interfaces common to all code (IRepository, IComponent, etc.). Trap, DDD says that modules can exchange entities between modules, but only on a very limited scale (you really don't want to do this often).
With this in mind, I avoid using contexts and move on to "what I'm really trying to do, what these models have in common." Here is what I think when reading your question (if I understand them).
Person() is a base entity. It has ID and Name. PlayerSkill() is a Value Object, that is accessable from Person().PlayerSkill. Contact() is an entity that inherits Person(), so it inherits ID and Name, and has additional Contact properties you want.
Now I just ripped your domain. I know.
You can also use the hybird approach:
Person() is a base entity. It has ID and Name. Player() inherits Person(), applies Skill() and other VOs. Contact() inherits Person(), applies Address() and other VOs.
source share