Когда я только начинал с DDD, я также боролся с организацией контекста + домен + модуль + модель.
DDD действительно предназначен для руководства по построению моделей вашего домена. Как только я перестал пытаться суборганизовать свои контексты и границы и начал думать о том, что на самом деле делится между сущностями - вещи стали лучше сочетаться.
Я на самом деле не использую контексты, если только это не совсем другое приложение (app = context). Просто мои предпочтения. Но у меня есть Модули, которые совместно используют только основные рефераты и интерфейсы, общие для всего кода (IRepository, IComponent и т. Д.). Суть в том, DDD говорит, что модули могут обмениваться объектами между модулями, но только в очень ограниченном масштабе (вы действительно не хотите делать это часто).
Имея это в виду, я бы отказался от использования контекстов и перешел к «что я на самом деле пытаюсь достичь, что общего у этих моделей). Вот что я думаю, читая ваш вопрос (если я понимаю их).
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.
Теперь я просто порвал ваш домен. Я знаю.
Вы также можете использовать гибридный подход:
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.