Por lo tanto, hubiera sido imposible cambiar a otro ORM (no es que quisiéramos).
Eso parece mal. Una ventaja importante del patrón de repositorio es que oculta la lógica de acceso a datos y que es fácilmente intercambiable.
Hasta ahora parece que puse mi lógica de negocios en mi modelo de dominio y, a través de repositorios, trabajaría con el ORM (el que elija). Sin embargo, si quisiera continuar usando la herramienta MDA para la parte ORM de la aplicación, el modelo creado aquí sería muy anémico (es decir, no contiene ninguna lógica comercial). Del mismo modo, si utilizo Entity Framework (.net) o NHibernate para mi ORM, también sería un modelo anémico. No estoy seguro de dónde pondría la lógica de negocios si solo usara NHibernate.
Un modelo de dominio anémico es considerado una mala práctica por muchos, por ejemplo, Martin Fowler. Debe evitar dicho diseño porque dicho modelo conduce a técnicas de diseño de procedimientos en lugar de un buen diseño orientado a objetos. Luego tiene clases de datos y clases de administrador / procesamiento, lo que significa que separó el estado y el comportamiento. Pero un objeto realmente debería ser "estado y comportamiento".
NHibernate hace un gran trabajo en la persistencia de la ignorancia. Puede ocultar los detalles de mapeo en XML o con FluentNHibernate y simplemente escribir POCOs simples. Es muy fácil crear un modelo de dominio rico con NHibernate. Creo que también puede hacerlo con el marco de la entidad y la herramienta MDA. Mientras esta herramienta produzca clases parciales, puede extender el código generado con bastante facilidad sin tener que preocuparse de que una nueva generación pueda destruir su código escrito por el usuario.
Para resumir esta larga historia. Cuando usa NHibernate, nada, no repito nada , le impide adoptar un modelo de dominio rico. Recomiendo usarlo con FluentNHibernate y mapear a mano. El código de mapeo tarda solo de 5 a 10 minutos en escribirse. Supongo que lo mismo es cierto para el marco de la entidad y que sus herramientas al menos crean clases parciales que son fácilmente extensibles.
¿Estoy en lo correcto al pensar de esta manera, en otras palabras, con DDD toda la lógica de negocios en el dominio y solo uso el ORM para la persistencia a través de repositorios?
En su mayor parte tienes razón. Debe tener un modelo de dominio rico. Especialmente cuando las cosas se vuelven cada vez más complejas, es más fácil de mantener y extender cuando lo ha diseñado correctamente. Pero tenga en cuenta que DDD también conoce los servicios (capa de dominio y capa de aplicación) para implementar la lógica de negocios y las fábricas para encapsular la lógica de creación.
También tiendo a diferenciar la lógica de negocios en lógica de dominio y lógica de negocios de aplicaciones reales. La lógica del dominio es cómo interactúa y se comporta el dominio, mientras que la lógica de la aplicación, que es una capa completamente diferente, encapsula cómo se usa el dominio para el caso de uso / aplicación específico. Muchas veces tengo que actualizar el modelo de dominio para admitir casos de uso específicos y hacerlo más potente.