Преобразовать из объекта данных в бизнес-объект.Лучшая практика - PullRequest
4 голосов
/ 25 июня 2011

Допустим, в DataLayer есть UserEntity, который необходимо преобразовать в User в BusinessLayer.Между этими двумя типами нет сопоставления 1: 1, и наследование не является опцией.

Я хочу преобразовать User в UserEntity и наоборот.Каков наилучший способ сделать это?Я вижу несколько шаблонов, но не знаю, что лучше и почему:

  1. Реализация в пользовательском 2 метода: от Entity и ToEntity
  2. Реализация TypeConverter
  3. Перегрузить оператор =

1 Ответ

2 голосов
/ 25 июня 2011

Не перегружайте оператор присваивания - это неприятно и укусит любого разработчика, который унаследует ваш код.Лучше быть явным.

Я бы инкапсулировал логику для отображения этих двух типов (или более, если это не 1: 1) в отдельный класс.Создайте класс UserAdapter, в котором вы сможете реализовать свои методы ToEntity / FromEntity.

И убедитесь, что вы используете AutoMapper , чтобы минимизировать объем кода.

AutoMapper использует плавный API конфигурации для определения объекта-объектная стратегия.AutoMapper использует основанный на соглашении алгоритм сопоставления для сопоставления значений источника и назначения.В настоящее время AutoMapper ориентирован на сценарии проецирования моделей для выравнивания сложных объектных моделей для DTO и других простых объектов, дизайн которых лучше подходит для сериализации, связи, обмена сообщениями или просто для защиты от коррупции между доменом и прикладным уровнем.

Обновление:

Вы можете добавить эти методы в класс User, и этого может быть достаточно для небольшого проекта.Я немного пурист, когда дело доходит до дизайна, и я не буду использовать логику адаптера вне этих классов. Почему класс User должен быть зависимым и иметь какие-либо знания о классе UserEntity? Мне немного неприятно связывать их вместе.Отдельный слой адаптеров более перспективен.Например, если вам придется заменить слой вашей базы данных на другой (т. Е. Перейти с Linq2SQL на EntityFramework или Dapper), все, что вам нужно сделать, это создать новые адаптеры - ваши бизнес-классы останутся без изменений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...