SlandShow
@SlandShow
70% of my body is made of movies.

Как заменить громоздкий код лямбдами или сделать его более красивым?

У меня есть маппер, который преобразует реальные сущности из базы в DTO. Проблема заключается в том, что таблицы являются вложенными.

Если быть точным, то у меня есть 5 таблиц, которые связаны между собой так:

5c20ed1444744348762085.png
И вот как раз мне в конечном итоге надо промапить сущность A в DTO. Для этого я написал весьма громоздкий маппер:
public AssuranceAccessLineDto mapperToAssuranceAccessLineDto(AccessLine accessLine) {
        return modelMapper.map(accessLine, AssuranceAccessLineDto.class)
                .setId(accessLine.getId())
                .setTechnology(accessLine.getTechnology().name())
                .setStatus(accessLine.getStatus().name())
                .setLineId(accessLine.getLineId())
                .setPortId(accessLine.getPort().getId())
                .setAssuranceNeProfileDto(
                        accessLine.getDefaultNeProfile() == null ?
                                null : mapperToAssuranceDefaultNeProfileDto(accessLine.getDefaultNeProfile())
                )
                .setAssuranceSubscriberNeProfileDto(
                        (accessLine.getDefaultNeProfile() == null || accessLine.getDefaultNeProfile().getSubscriberNeProfile() == null) ?
                                null : mapperToAssuranceSubscriberNeProfileDto(
                                accessLine.getDefaultNeProfile().getSubscriberNeProfile()
                        )
                )
                .setAssuranceDefaultNetworkLineProfileDto(
                        accessLine.getDefaultNetworkLineProfile() == null ?
                                null : mapperToAssuranceDefaultNetworkLineProfileDto(
                                accessLine.getDefaultNetworkLineProfile()
                        )

                )
                .setAssuranceSubscriberNetworkLineProfileDto(
                        (accessLine.getDefaultNetworkLineProfile() == null || accessLine.getDefaultNetworkLineProfile().getSubscriberNetworkLineProfile() == null) ?
                                null : mapperToAssuranceSubscriberNetworkLineProfileDto(
                                accessLine.getDefaultNetworkLineProfile().getSubscriberNetworkLineProfile()
                        )

                );
    }


Мой вопрос заключается в следующем. Могу ли я сделать эти сеттеры у маппера более красивыми и читабельными через лямбды?
  • Вопрос задан
  • 219 просмотров
Решения вопроса 1
zagayevskiy
@zagayevskiy Куратор тега Java
Android developer at Yandex
Нет, лямбды не для этого.
Совет - вот эту(и подобную) фигню
accessLine.getDefaultNeProfile() == null || accessLine.getDefaultNeProfile().getSubscriberNeProfile() == null) ?
                                null : mapperToAssuranceSubscriberNeProfileDto(
                                accessLine.getDefaultNeProfile().getSubscriberNeProfile()

вынести в отдельный метод с нормальным названием. Сразу станет легче жить. Ну и между двумя доступами внутреннее значение может измениться, и ты словишь NPE. Сохраняй в переменную.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
23 нояб. 2024, в 00:16
2000 руб./за проект
22 нояб. 2024, в 23:55
3000 руб./за проект
22 нояб. 2024, в 22:26
3500 руб./за проект