ModelMapper с Spring, где поставить явные сопоставления? - PullRequest
0 голосов
/ 23 сентября 2018

Я использую ModelMapper с Spring.В моем классе контроллера я автоматически подключаю bean-компонент ModelMapper:

@Autowired
private ModelMapper mapper;

Я хочу сделать явное отображение между моим классом модели и моим DTO в моих методах контроллера, что-то вроде:

modelMapper.addMappings(mapper -> {
  mapper.map(src -> src.getBillingAddress().getStreet(),
      Destination::setBillingStreet);
  mapper.map(src -> src.getBillingAddress().getCity(),
      Destination::setBillingCity);
});

А затем использовать маппер для сопоставления классов.

Мой вопрос: правильно ли добавлять явные сопоставления при каждом вызове метода контроллера?Будет ли объект ModelMapper расти в объеме памяти?

Другое решение - добавить отображение только один раз при создании компонента ModelMapper, но я не думаю, что использование логики отображения в конфигурации компонента является хорошим решением..

1 Ответ

0 голосов
/ 23 сентября 2018

Вполне нормально настроить логику отображения в конфигурации компонента ModelMapper.Сопоставление является актуальной задачей этого класса, поэтому его следует настраивать при его создании.

Тем не менее, я предпочитаю создавать несколько выделенных определений сопоставления, по одному для каждого типа или группы связанных типов.

Делая это таким образом, вы отделяете аспект конфигурации отдельно от фактического использования преобразователя в контроллерах - без создания большой кучи несвязанного кода конфигурации сопоставления в одном классе.Действительно, настройка сопоставителя в каждом контроллере будет нарушать такие принципы, как DRY (не повторяйте себя) и SoC (разделение интересов).

В вашем случае (singleton ModelMapper) вы можете создать @Configuration -аннотированные классы для каждого типа или группы типов, которые вы хотите отобразить.Внутри этого класса вы получите ModelMapper и добавите сопоставления типов.Добавьте свой код конфигурации либо в

  • * ModelMapper -получающий конструктор, либо в
  • @PostConstruct -аннотированный метод, который обращается к атрибуту @Autowired ModelMapper.

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

...