Недавно моя работа перешла со стека PHP/Golang на стек Java Spring. Вместе с этим пришло освежение памяти о мире Java, к которому я не прикасался долгое время.
Это будет моя попытка обобщить то, что я узнал за последнее время, чтобы сделать мою жизнь программиста лучше.

Модернизация 2.0

Я пришел путем модернизации, изучив некоторые из предыдущих работ моих коллег.

Retrofit был разработан Square Inc и Джейком Уортоном (который сейчас работает в Google), 2 среди ведущих профилей в Github, внесших вклад в Java.

Мне понравилось, потому что он обеспечивает строгую типизацию для внешнего вызова API, тем самым повторяя лучшие практики.
Широкий спектр возможных настроек с помощью библиотек OkHttp и Retrofit открывает множество возможностей.

Например, уровни перехватчика и преобразователя, после правильной настройки, значительно упростят работу разработчика, сделав ваш код более читабельным и, следовательно, более связанным с логикой бизнес-домена.

Мне также нравится настраиваемый OkHttp, особенно с методом newBuilder(), который позволяет создавать новые сборщики на основе существующего клиента.

Подробнее об этом: http://jakewharton.com/making-retrofit-work-for-you-ohio/

AssertJ

Когда я начинаю работать с Java, меня больше всего беспокоит вопрос о том, как сделать мой код простым в сопровождении. И очевидный ответ — модульное тестирование.

На этой неделе мы быстро установили хорошую платформу модульного тестирования, интегрированную в наш процесс сборки/развертывания, с охватом кода около 35%.
Мы планируем продвинуться дальше и внедрить интеграционное тестирование в ближайшем будущем.

Это неплохо для проекта, которому меньше месяца и не более 3 разработчиков.

Однако что мне не понравилось, так это то, насколько сложно читать тесты.

В настоящее время мы используем библиотеку Mockito Assert, и я стремился либо перейти на Mockito BDD, либо на AssertJ, чтобы иметь более удобочитаемую кодовую базу. Поскольку вся компания переходит на Java с Golang/PHP, я считаю необходимым отдать приоритет читабельному, поддерживаемому коду над всем остальным. Возможность иметь новые ресурсы, выполняющие задачи за короткий промежуток времени, имеет решающее значение для своевременного запуска сервисов.

Я еще не принял решение по этому поводу, но в ближайшем будущем я проведу еще несколько тестов.

Вы можете узнать больше об AssertJ здесь: http://joel-costigliola.github.io/assertj/assertj-joda-time.html

Вот немного информации о библиотеке Mockito BDD: http://www.baeldung.com/bdd-mockito

Джода Тайм

Я наткнулся на Joda Time, когда занимался исследованием AssertJ.

Всего за 1 час до этого мой товарищ по команде сообщил мне, что мой модульный тест дает сбой, блокируя процесс выпуска.
«Невозможно!», — подумал я.
Я запускаю модульный тест вручную перед фиксацией, как он может провалиться ?

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

Часовой пояс — одна из больших проблем, с которой разработчики сталкиваются каждый день, работая в многонациональных компаниях.

Я думаю, что нам нужно решить эту проблему навсегда.

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

Я отмечу, что Joda-Time рассматривается сейчас ^_^

Читайте об этом здесь: http://www.joda.org/joda-time/

Ломбок

Нечего сказать о Lombok, кроме того, почему он еще не является частью языка Java.

Большинство людей просто думают о Lombok как о замене Getter Setter, но некоторые аннотации, такие как «@Builder», действительно спасают жизнь.

Здесь Ticket — это POJO, который мы получили от стороннего JAR и не имеем никакого контроля над его источником. В билете есть только базовый геттер-сеттер, который делает создание фиктивных данных для модульного теста головной болью.

Нам важно иметь возможность создавать MockTicket с использованием шаблона компоновщика, чтобы сделать наш код более читабельным и, следовательно, удобным для сопровождения.

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

Используйте Ломбок: https://projectlombok.org/features/all