Приложение использует ADO.NET для вызова sprocs практически для каждой операции с базой данных. Некоторые из этих sprocs также содержат достаточное количество логики домена. Логика доступа к данным для каждого объекта домена находится в самом классе домена. т. е. нет разделения между логикой домена и логикой доступа к данным.
Я хочу сделать следующее:
- отделить доменную логику от логики доступа к данным
- делает постоянство модели домена невежественным
- осуществить переход к NHibernate постепенно между выпусками, рефакторинг отдельных частей DAL (если это можно так назвать) за один раз
Вот мой подход к переходу одного класса на постоянство NHibernate
- создать сопоставление для класса домена
- создать репозиторий для класса домена (базовые операции CRUD, унаследованные от универсального базового репозитория)
- создать метод в репозитории для каждого sproc, используемого старым DAL (выполняя некоторый рефакторинг по пути извлечения логики домена)
- изменить потребителей для использования хранилища, а не логики доступа к данным в самом классе
- удалить старую логику доступа к данным и sprocs
У меня проблемы с № 1 и № 4.
(# 1) Как сопоставить свойства типа без сопоставления NHibernate?
Рассмотрим класс Person со свойством Address (Address является объектом домена без сопоставления NH, а Person является классом, который я отображаю). Как я могу включить Адрес в отображение Персона, не создавая полное сопоставление для Адреса?
(# 4) Как мне управлять зависимостями от старой логики доступа к данным во время перехода?
Классы в модели предметной области используют старую логику доступа к данным, которую я хочу удалить. Рассмотрим класс Order со свойством CustomerId. Когда Заказу требуется информация о Клиенте, он вызывает логику доступа к данным ADO.NET, которая находится в классе Customer. Какие есть варианты, кроме поддержки старой логики доступа к данным до тех пор, пока зависимые классы не отобразятся сами?