Недавно моя работа перешла со стека 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