Задать вопрос
SerJook
@SerJook
кодер

Как научиться разрабатывать большие проекты на Java, если раньше писал на PHP?

Я много писал веб на PHP (с фреймворками), но давно хотел перейти на Java, Spring и т.д.
В PHP я мог видеть результат изменения, которые я внёс в код, практически сразу в браузере. Соответственно я мог безболезненно делать сколько угодно итераций.
С большим же энтерпрайз проектом на Java возникли проблемы. Я открыл его в IDEA.
Во-первых, мои изменения сначала надо было скомпилировать, что тоже далеко не мгновенно.
Но это ладно.
Второй проблемой стало отображение в браузере результатов моих изменений. Я нашел 2 варианта - перезапустить приложение или использовать Hot reload.
Оказалось, что приложению надо 3-4 минуты, только чтобы стартануть на машине разработчика.
А hot reload работает только с отдельными функциями. К тому же он глючит, из-за чего приходилось перезапускать приложение и IDEA.
Из-за долгих перезапусков (тем более на новом для меня проекте) разработка шла долго и мучительно.

Может я неправильно готовлю Джаву?
  • Вопрос задан
  • 233 просмотра
Подписаться 2 Простой 2 комментария
Решения вопроса 1
mayton2019
@mayton2019 Куратор тега Java
Bigdata Engineer
Я много писал веб на PHP (с фреймворками), но давно хотел перейти на Java, Spring и т.д.

Поздравляю. Ты теперь откроешь для себя целую вселенную и поймешь что Java - очень разная.
Например стоило-бы отличать Java Android и все остальное.

По поводу процесса компилляции. Почитай про технологии JSP-страничек. Она очень похожа
на PHP по своей задумке. И там реакция на изменения кода чуть быстрее чем в Servlet-приложении
хотя JSP идеологически является макросом над сервлетом.

Но в топике верно выше написали что от серверного рендеринга сейчас уходят. И современные Java-веб
приложения обычно делают 2 команды. Первая делает только дизайн фронта. Вторая - обычно микросервисы
которые с этим фронтом взаимодействуют. Почитай также про GraphQL. Это полезно для развития.
И многие вещи в Java были добыты эволюционным путем. В частности такая мануфактура как
дизайн и бизнес-логика имеют четкое разделение и это правильно. Это стабилизирует релиз
и позволяет бизнесу делать и тестировать фичи независимо. Например фича нового REST сервиса
может быть создана и оттестирована еще до того как готов дизайн и наоборот. Дизайн на моках
можно показать заказчику пока сервис только в разработке.

Оказалось, что приложению надо 3-4 минуты, только чтобы стартануть на машине разработчика.

Это нормально. Мне попадались очень тяжелые монолиты которые на мощных машинах стартовали
по 30-40 минут. Да и такое бывает. Это тяжелая приставка *enterprise. И конечно это идеологически
отличает Java от PHP. Для корпоративных приложений в принипе неважно сколько они стартуют.
Главное когад они уже стартовали и 30 минут прогревали кеши из БД например то биржа будет
работать быстрее в runtime. Вот. А подготовку к работе можно делать и 30 минут - это тоже ОК.
Главное что клиент это не замечает в силу закрытого опер-дня и Blue-Green deployment.
Тоже почитай про это кстати. Полезно.

Из-за долгих перезапусков (тем более на новом для меня проекте) разработка шла долго и мучительно.

Могу посоветовать сфокусироваться на модульных тестах. То как ты разрабатывал раньше, сверяя
каждый символ с браузером - может быть не эффективным. По сути если ты написал бизнес-логику
и дизайн для нее готов и твоя задача просто проверить что функии получили на вход инпуты
и выдали верные аутпуты - то значит задача на 99% решена и можно релизить.

С точки зрения например корпоративного процесса разработки - любая фича разрабатывается 1 день. Это я меряю
по себе. Беря во внимание чтение ТЗ. Разработку. Цикл тестирование. Деплойменты. Аксептенсы и прочее.
И если тебя просят покрасить кнопочку с красного цвета на синий - ты спокойно сообщай что
это занимает 1 день в конвейере процессов. И это нормально. Это корпоративная бюрократия.
И Java - бюрократична. И ты главное не стрессуй а просто используй эту бюрократию в свою
пользу. Пей кофе. Читай книги пока идет deploy pipeline.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
xez
@xez Куратор тега Java
TL Junior Roo
Как научиться разрабатывать большие проекты на Java

Все просто.
Нужно понимать solid и ооп.
Уметь в декомпозицию.
Использовать юнит-тесты.

Почитайте Чистый Код и Эффективная Джава.

Ну и, моё мнение, серверный рендеринг нынче не популярен, не стоит на это тратить своё время.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы