Использование AutoMapper внутри Onion Architecture - PullRequest
0 голосов
/ 15 апреля 2020

Мы реализуем приложение API-интерфейса aspnetcore с использованием onion-архитектуры. У меня есть следующие звонки:

  • Домен
  • Приложение
  • Инфраструктура
  • Решитель зависимостей

Пока мы удалось сохранить все сторонние реализации на уровне инфраструктуры, вставив универсальный интерфейс c в нижние кольца, где нам нужны эти функции.

Однако теперь мы должны начать использовать AutoMapper, и вот здесь я немного запутался, как его реализовать. В нашем приложении самое низкое кольцо, где нам нужны мапперы, это кольцо приложения. Это кольцо, которое содержит все DTO. На мой взгляд, если мы придерживаемся этой архитектуры, реализация AutoMapper должна находиться на уровне инфраструктуры, и тогда мы можем внедрить ее интерфейс IMapper или обернуть этот интерфейс чуть более универсальным c интерфейсом (просто содержащим пару Map ( Методы SourceT sr c, TargetT trg) во внутреннее кольцо (кольца). Пока все хорошо. Путаница возникает, когда я думаю о конфигурации отображения. Поскольку не существует универсального c способа настройки этого отображения (CreateMap ()), похоже, что он должен быть на уровне инфраструктуры, однако, логично, если я добавляю еще один DTO в кольцо приложений, почему я должен go на уровне инфраструктуры для создания сопоставления для него. Кажется, что конфигурация должна быть в кольце приложений, но в этом случае мне придется зависеть от Automapper.

У кого-нибудь есть какие-либо предложения о том, как решить эту проблему, или я смотрю на это неправильно?

1 Ответ

1 голос
/ 15 апреля 2020

Что-то вроде AutoMapper включает два разных класса, очевидно, обычно пересекающих границы уровня приложения. Например, вы можете сопоставить сущность базы данных на вашем уровне DAL с классом DTO на вашем бизнес-уровне. Таким образом, место для этого кода находится там, где эти границы пересекаются.

Например, если инфраструктура зависит от домена и вы сопоставляете классы между доменом и инфраструктурой, то место для кода AutoMapper будет в инфраструктуре, так как оба слоя доступны. Аналогично, если у вас есть модель представления на уровне приложения, которая сопоставляется с классом на уровне инфраструктуры, то место для кода AutoMapper находится на уровне приложения. Опять же, потому что именно там задействованы оба слоя.

Длинный и короткий, не только одно место. Каждый слой должен содержать код отображения, соответствующий этому слою.

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