il aurait donc été impossible de passer à un autre ORM (pas que nous voulions)).
Cela semble faux. Un avantage majeur du modèle de référentiel est que vous masquez la logique d'accès aux données et qu'elle est facilement échangeable.
Jusqu'à présent, j'ai l'impression de mettre ma logique métier dans mon modèle de domaine et via des référentiels, je travaillerais avec l'ORM (que j'ai choisi). Cependant, si je voulais continuer à utiliser l'outil MDA pour la partie ORM de l'application, le modèle créé ici serait très anémique (c'est-à-dire qu'il ne contiendrait aucune logique métier). De même, si j'utilisais Entity Framework (.net) ou NHibernate pour mon ORM, ce serait aussi un modèle anémique.? Je ne sais pas où vous mettriez la logique commerciale si je viens d'utiliser NHibernate.
Un modèle de domaine anémique est considéré comme une mauvaise pratique par beaucoup, par exemple par Martin Fowler. Vous devez éviter une telle conception car un tel modèle conduit à des techniques de conception procédurales plutôt qu'à une bonne conception orientée objet. Vous avez ensuite des classes de données et des classes de gestionnaire / traitement, ce qui signifie que vous avez séparé l'état et le comportement. Mais un objet devrait vraiment être "état et comportement".
NHibernate fait un excellent travail à l'ignorance de la persistance. Vous pouvez masquer les détails du mappage en XML ou avec FluentNHibernate et simplement écrire des POCO simples. Il est très facile de créer un modèle de domaine riche avec NHibernate. Je pense que vous pouvez aussi le faire avec le framework d'entité et l'outil MDA. Tant que cet outil produit des classes partielles, vous pouvez étendre le code généré assez facilement sans avoir à vous soucier qu'une nouvelle génération pourrait détruire votre code écrit par l'utilisateur.
Pour abréger cette longue histoire. Lorsque vous utilisez NHibernate, rien, je ne répète rien , vous empêche d'embrasser un modèle de domaine riche. Je recommande de l'utiliser avec FluentNHibernate et de cartographier à la main. L'écriture du code de mappage ne prend que 5 à 10 minutes. Je suppose que la même chose est vraie pour le framework d'entité et que ses outils créent au moins des classes partielles facilement extensibles.
Ai-je raison de penser de cette façon, en d'autres termes avec DDD toute la logique métier du domaine et d'utiliser simplement l'ORM pour la persistance via les référentiels?
Pour la plupart, vous avez raison. Vous devriez avoir un modèle de domaine riche. Surtout lorsque les choses deviennent de plus en plus complexes, il est plus facile à entretenir et à étendre lorsque vous les avez conçues correctement. Mais gardez à l'esprit que DDD connaît également les services (couche de domaine et couche d'application) pour implémenter la logique métier et les usines pour encapsuler la logique de création.
J'ai également tendance à différencier la logique métier en logique de domaine et en logique métier d'application réelle. La logique du domaine est la façon dont le domaine interagit et se comporte tandis que la logique d'application, qui est une couche complètement différente, encapsule la façon dont le domaine est utilisé pour le cas d'utilisation / l'application spécifique. Souvent, je dois mettre à jour le modèle de domaine pour prendre en charge des cas d'utilisation spécifiques et le rendre plus puissant.