Отображение несовместимых свойств из DTO в сущность - PullRequest
0 голосов
/ 27 марта 2019

Я выполняю рефакторинг веб-приложения, чтобы гарантировать, что мои сущности всегда инициализируются в действительном состоянии. Это означает, что я использую DTO для ввода данных пользователем и сопоставляю эти DTO с моими сущностями после проверки.

Однако некоторые свойства DTO не могут быть напрямую сопоставлены со свойствами объектов. Если DTO содержит изображение в кодировке base64, а для сущности требуется URL-адрес файла изображения, мне нужно сохранить base64 в файле в преобразователе, чтобы присвоить сущности URL-адрес этого файла.

Это может быть только я, но такое чувство, что такого рода вещи не принадлежат в DTO картографу сущностей. Есть ли причины, по которым это может быть плохой идеей? Какие стратегии обычно используются для этого вида картирования?

1 Ответ

1 голос
/ 16 апреля 2019

Мне кажется, что в вашем случае у вас нет простого процесса отображения от DTO s до Entities , потому что в этом процессе есть логика приложения.Хранение изображений где-то и получение URL / пути к этому изображению является специфической логикой приложения, поэтому вам, вероятно, понадобится Служба .

Приложения обычно имеют какие-то задачи или операций , которые необходимо выполнить, и определение потока приложения.Одним из способов определения этого потока является использование Commands и присоединение DTO к этим Commands .

Например, допустим, у вас есть процесс регистрации, поэтому пользователь должен ввести некоторые данные, и вам необходимо создать учетную запись сущность.

В случае веб-приложения веб-интерфейс должен будет собирать информацию о пользователе, а также создавать и отправлять команду бэкэнду.В этом случае у вас будет RegisterUserCommand .Эта команда будет содержать свойство UserInfo DTO или иметь свойства для информации о пользователе.Например:

RegisterUserCommand {

   string UserName
   string FirstName;
   string LastName;
   Image Avatar;
}

Следующее, что вам нужно, это RegisterUserCommandService или ( RegisterUserCommandHandler в зависимости от вашего вкуса и используемой терминологии), которое будет обрабатывать / обрабатывать Команда .Вам также понадобится StorageProvider , который будет обслуживать операции провайдера для хранения и извлечения изображений (может быть в файловой системе, Amazon S3, Dropbox и т. Д.) И давать вам ссылку.Вот пример псевдокода

RegisterUserCommandService {

  Process(RegisterUserCommand cmd) {

     avatarLink = storageProvider.Store(cmd.Avatar);

     account = new Account(cmd.UserName, ...., avatarLink);

     accountRepository.Save(account);
}

Если вы расскажете мне больше о вашем приложении, я могу предоставить пример для вашего конкретного случая.

Вот некоторые ресурсы, которые вы можете проверить:

...