Uma dica que eu dou é a de não se procupar tando com as relações.
Sei que aparentemente vc está num contexto bem de OO, então vc precisa criar várias abstrações e contratos, etc; Eu diria pra vc se preocupar em como criar um domínio de forma fechada, ou seja, onde ele conheça só a sua implementação. E se esse domínio precisar usar uma funcionalidade de um outro domínio, vc faz injeção de dependência a fim de usar só a funcionalidade que vc precisa especificamente.
É um pouco abstrato só com palavras então eu diria pra considerar dar uma olhada no conceito de Ports and Adapters
. Vai cair bem no seu contexto de OO e fica bem mais fácil de usar funcionalidades de outro domínio de forma segura e clara.