тому неможливо було б перейти на інший ORM (не те, що ми хотіли)).
Це здається неправильним. Основна перевага шаблону сховища полягає в тому, що ви приховуєте логіку доступу до даних і що це легко обмінюватися.
Поки здається, що я вкладаю свою бізнес-логіку в свою модель домену, і через сховища я б працював з ORM (який я коли-небудь обрав). Однак, якби я хотів і надалі використовувати інструмент MDA для частини програми ORM, створена тут модель була б дуже анемічною (тобто не містила жодної логіки бізнесу). Аналогічно, якщо я використовував Entity Framework (.net) або NHibernate для мого ORM, це теж буде анемічною моделлю. Я не впевнений, куди ви вкладете бізнес-логіку, якби я просто використовував NHibernate.
Анемічна модель домену багатьма вважається поганою практикою, наприклад, Мартіном Фаулером. Вам слід уникати такої конструкції, оскільки така модель призводить до процедурних прийомів проектування, а не до гарного об'єктно-орієнтованого дизайну. Потім у вас є класи даних та класи менеджера / обробки, що означає, що ви розділили стан та поведінку. Але об’єктом справді має бути «стан і поведінка».
NHibernate робить велику роботу при наполегливому незнанні. Ви можете сховати деталі відображення у XML або за допомогою FluentNHibernate та просто написати звичайні POCO. Створити багату модель домену за допомогою NHibernate дуже просто. Я думаю, що ви можете це зробити і з суттю фреймворку та інструментом MDA. Поки цей інструмент виробляє часткові класи, ви можете досить просто розширити згенерований код, не турбуючись про те, що нове покоління може знищити ваш написаний користувачем код.
Якщо коротко сказати, ця довга історія. Коли ви користуєтесь NHibernate, ніщо, я нічого не повторюю, не заважає вам використовувати багату модель домену. Я рекомендую використовувати його з FluentNHibernate та картографувати вручну. Код відображення займає лише 5 - 10 хвилин для написання. Я припускаю, що це саме стосується сутньої структури і що її інструменти принаймні створюють часткові класи, які легко розширюються.
Чи правильно я думаю таким чином, інакше кажучи, з DDD вся ділова логіка в домені та просто використовую ORM для збереження через сховища?
Здебільшого ви праві. У вас повинна бути багата модель домену. Особливо, коли речі стають все складнішими, їх легше підтримувати та розширювати, коли ви правильно їх спроектували. Але майте на увазі, що DDD також знає (доменний шар та шар додатків) для впровадження бізнес-логіки, а Фабрики - для інкапсуляції логіки створення.
Я також схильний диференціювати бізнес-логіку на доменну логіку та фактичну ділову логіку. Логіка домену - це те, як домен взаємодіє та поводиться, тоді як логіка програми, яка є абсолютно іншим шаром, інкапсулює, як використовується домен для конкретного випадку використання / застосування. Часто мені доводиться оновлювати модель домену, щоб підтримувати конкретні випадки використання та зробити її більш потужною.