Пурист (я стараюсь оставаться чистым) скажет вам, что ваша модель представляет ваши данные. И поэтому все, что необходимо сохранить, делается так только при необходимости через репозитории. Кроме того, когда у вас есть сложные объекты, вы хотите использовать сервис для их объединения. Например, User + Employee = UserEmployee, который доступен только через IUserEmployeeService.
С этими расплывчатыми заявлениями у вас есть отличная возможность.
Создайте антикоррупционный слой, который позволит вам одновременно начать работу с устаревшей БД.
Это еще одна глава в книге пьес DDD. Антикоррупционный уровень используется для взаимодействия с унаследованной системой с использованием фасадов, переводчиков и адаптеров, чтобы изолировать унаследованную БД от вашей модели чистого домена.
Теперь, это может быть намного больше работы, чем вы хотели. Итак, вы должны спросить себя в этот момент:
Хочу ли я начать процесс
уходя из этой устаревшей БД, или
это останется на всю жизнь
приложение?
Если вы ответили, что можете начать миграцию, то смоделируйте фактический домен так, как вы этого хотите. Сохраняйте это с обычными репозиториями и сервисами. Получайте удовольствие, проектируя его так, как вы хотите, чтобы он хранился. Затем воспользуйтесь услугами агрегированных корней, чтобы проникнуть на антикоррупционный уровень и вытащить сущности, сохранить / обновить их локально и преобразовать в сущности вашего домена.
Если ответ таков, что устаревшая БД останется на всю жизнь проекта, тогда ваша задача будет намного проще. Используйте службы вашего домена (например, UserEmployeeService), чтобы получить доступ к антикоррупционным функциям UserFacade и EmployeeFacade (аналогично концепции «Удаленный сервис»).
На Фасадах получите доступ к устаревшей базе данных, используя адаптеры (например, LegacyDbSqlDatabase), чтобы получить raw legacyUser (). Следующим шагом будет использование преобразователя UserTranslator () и EmployeeTranslator (), который преобразует устаревшие пользовательские данные в версию сущности User () вашего фактического домена и возвращает их из UserFacade обратно в ваш UserEmployeeService, где они объединяются с Сотрудник, который пришел из того же места.
Вау, это было много печатать ...
С вашими Адаптерами и Фасадами вашего антикоррупционного слоя вы можете делать свой Linq-to-Sql или все, что захотите. Это не имеет значения, потому что вы полностью изолировали устаревшую БД / систему от вашего красивого и чистого Домена - вашего домена, который имеет свою собственную версию сущностей User () и Employee () и объектов-значений.