Du point de vue de l'immuabilité vous pourriez envisager de mettre des interfaces sur vos objets de domaine:
Dans la plupart des endroits dans votre code, vous voulez que vos objets immuables, de sorte que vous pouvez garantir qu'ils ne seront pas modifiés - Dans ce cas, vous travaillez avec un objet d'accès aux données qui renvoie l'interface, ce qui garantit que votre objet domaine ne peut pas être modifié. Si vous écrivez une page d'administration de quelque sorte où l'utilisateur finira par éditer l'objet de domaine, vous devrez exposer des setters - votre objet d'accès aux données devra renvoyer des instanaces 'MutableDomainObject' (soit une classe ou une sous-interface). Cela dit, je suis d'accord avec la philosophie de YAGNI exprimée ci-dessus - si vous n'avez pas besoin de garantir l'immuabilité pour le moment, cela ne vaut pas la peine d'investir pour le moment. Il ne devrait pas être trop difficile de factoriser les interfaces à une date ultérieure.
Pourquoi votre assembly d'entité dépend-il de votre assembly de référentiel? Tout devrait dépendre des entités, les entités ne devraient dépendre de rien –