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