Pull to refresh
27
0
Вячеслав Чернышов @xpendence

backend.developer { java, kotlin }.in(Sber)

Send message
Всё написал в IDEA, образы собирал и коммитил во встроенном в IDEA терминале, а деплоил на удалённый сервер через терминал.
Да, рабочий процесс был очень интересен, учитывая, что в реакте я пока новичок, но если бы я взялся описывать ещё и его, статья была бы просто нечитаемой из-за своего размера :) Но сфокусироваться хотелось на докере, поэтому я и опустил все эти моменты :)
Спасибо, что сообщили об этом.
Думаю, есть смысл дополнить статью ещё одной, где можно будет раскрыть эти темы.
Очень приятно, что Вы интересуетесь моими профессиональными успехами. Но завидовать надо скромнее, мне кажется. Также, приглашаю Вас посетить мой профессиональный сайт developer.xpendence.ru и на мою страницу в ВК, где Вы сможете поделиться своей историей успеха.
Да, спасибо. Хотел включить ещё и docker-compose, и создание пользовательских сетей, но статья и так раздулась до каких-то нереальных размеров.
Да, действительно. Спасибо, поправил пример.
В примере я разбираю React-приложение, стало быть, для того, чтобы развернуть React-приложение, да и любое приложение, которое рендерит фронт, нам нужно будет запустить его через npm. Очень сомневаюсь, что Вы не сталкивались с примерами из практики, когда фронт собирается отдельно на том же реакте, бэк и фронт лежат в разных микросервисах и они общаются через REST. Конечно, за исключением случаев, когда бэк на Java рендерит JSP, но, я надеюсь, Вы ведь не об этом?

На протяжении своей профессиональной деятельности я не раз сталкивался с таким подходом, вот и сейчас мы пишем приложение на докере с полутора десятками микросервисов, которые собираются, правда, через OpenShift (но это уже другая история), но внутри тот же докер. Если говорить о хакатонах, то подход, когда каждый пишет свой микросервис, а потом всё это собирается отдельно и общается через REST — вообще, на мой взгляд, самый рабочий.

Интересно, спасибо. То есть, мы обрабатываем Promice в том же методе и возвращаем только готовый ответ, дождавшись его?

Сениор в конкретной компании далеко не значит сениор в своём языке.

Мне после 8 месяцев коммерческой разработки джуном один банк предложил должность сениора (правда, с зарплатой low mid). Я, конечно, отказался (не хотелось работать в компании, в которой сениоры моего уровня).

В другой компании у нас был сениор, которого сделали таким, чтобы только он не ушёл (и он всё равно ушёл через два месяца). Код он писал на уровне ниже среднего, например, не знал, что в HashMap ключи уникальные.
Пользуйтесь на здоровье :)
Что поделать, большинству действительно хватает Java 7, но определённому проценту разработчиков хочется вырасти за рамки «if not null». Несомненно, они и их код являются объектом ненависти со стороны первых, но их не остановить.
А есть ли возможность сетить значение из @Aspect-метода обратно в обрабатываемый метод?
Например, у меня есть контроллер:

    @ApiLogRequest(httpMethod = HttpMethod.POST, path = "/planet")
    @PostMapping
    public ResponseEntity<PlanetDto> save(@RequestBody PlanetDto dto) {
        Long requestId;
        return ResponseEntity.ok(service.save(dto));
    }

и метод, обрабатывающий запрос:

    @AfterReturning(value = "@annotation(after)", returning = "responseEntity")
    public void after(ResponseEntity responseEntity, ApiLogResponse after) throws JsonProcessingException {
        service.save(ApiLog.of(
                TransferType.RESPONSE.name(),
                after.httpMethod().name(),
                after.path(),
                new ObjectMapper().writeValueAsString(responseEntity)
        ));
    }

Можно ли засетить из метода after значение в Long requestId метода save?
Хорошо бы увидеть обстоятельную статью по Mapstruct на хабре, но её нет…
Ни одна библиотека не решает проблему целиком, тут Вы правы.
Ну, не такие уж они и магические :)

Затрудняют поиск использования полей в коде

Каким образом? Можете привести пример?

При внесении изменении в entity/dto проблемы сломанного мапинга будут видны только в рантайме

Для защиты от таких ситуаций программисты пишут тесты.
Возможность конфликтов с другими библиотеками (несовместимость аннотаций)

С тем же Lombok ModelMapper не конфликтует. Если Вы пишете свою какую-то аннотацию, то да, будьте готовы, что библиотеки не будут её понимать.

Нет гарантии, что после обновлении версии библиотеки не придется переписывать маппинг всех Entities, DTOs (breaking changes)

А есть примеры таких конфликтов и переписывания сущностей на примере ModelMapper?

Изменилось поле, напиши конвертер

Сущность является фундаментом любого приложения, если Вы меняете поля в сущности, Вам придётся всё приложение перелопатить. А вот ModelMapper, кстати, по умолчанию работает с полями и пытается их корректно замапить. Конвертер нужно писать только для специфичного мапинга. Так что, вполне вероятно, как раз он и сэкономит Ваше время :) Но проверять, конечно, надо. Тесты в помощь.

Опять не уйти от абстракции, чтобы скрыть реализацию. В сути получаем тот же «колхозный» ItemMapper на базе библиотеки.

Не понял, что Вы хотели сказать.

Как решить проблему, если DTO имеет другую (схожую) структуру с Entity. Например в DTO вычислимое поле А, которое состоит из суммы полей B и C соответствующей Entity. Писать для каждого случая постконвертер (TypeMap)?

В этом и смысл использования библиотек. Все специфичные поля библиотека обрабатывает сама. Обработку неспецифичных полей никто кроме Вас не напишет.
Либо Вы тролль, либо Вы настолько не разбираетесь в программировании, что с каждым последующим комментарием показываете ещё большую некомпетентность. Единственный вопрос, который возникает: как человек, настолько не разбирающийся в программировании, решил поучить новичков на Хабре? Вы действительно не понимаете, что ничего не понимаете, или это такой прикол?

Ахаха, не могу остановиться. Немного цитат.
«на js всякие прикольные эффекты для сайтов рисуются» — этапять
Перечисление джавовского стэка тоже мощное, без малейшего понимания, о чём речь в каждой технологии.
Ну и самая мякотка: «Как ПРОГРАММИСТ ты в джаве не нужен.» — осталось донести это до армии программистов самого популярного в мире языка.

Жаль, что автор не сможет больше писать статьи на Хабре, это было бы весело.

Information

Rating
Does not participate
Location
Москва, Москва и Московская обл., Россия
Works in
Date of birth
Registered
Activity

Specialization

Backend Developer
Lead
Java
Kotlin
Clean Architecture
Designing application architecture
System analytics