Ускоряем разработку
Любая работа java-программиста опирается на базис, под которым подразумевается не только непосредственно знание самого языка программирования, но также и знание дополнительных компонентов, без которых программирование в чистом виде, становится достаточно затруднительным либо неконкурентоспособным по времени. Именно об этом мы поговорим в этой статье.
Дальнейшее изложение не претендует на полноту, однако может оказаться для кого-то полезным.
Использование фреймоворков — первейшее дело
▍ Spring
Это фреймворк стоит в начале очереди полезностей. Он ускоряет разработку за счёт того, что состоит из множества модулей, каждый из которых отвечает за какую-то отдельную область и по сути, служит для внедрения соответствующих зависимостей.
Можно сказать, что он представляет собой некий каркас, с помощью которого можно решать множество типовых задач, которые и решаются с помощью соответствующих модулей.
Говоря конкретнее об ускорении разработки с использованием соответствующего модуля Spring, например, приходилось видеть информацию об уменьшении количества кода на 80% при использовании модуля Spring Data.
Spring может использоваться для создания веб-приложений корпоративного масштаба, также его могут использовать и бэкенд-разработчики. Однако сфера его применения ограничивается не только этими двумя направлениями, и он вполне может быть использован также и для мобильной разработки или десктопных приложений.
Полный список модулей Spring, которые закрывают решение конкретных задач, вы можете найти на официальном сайте вот по этой ссылке:
Как вы можете видеть, модулей достаточно много, однако, несмотря на это, некоторые стоят особняком, и вы часто могли их видеть в требованиях к различным вакансиям.
▍ Spring Boot
Он служит для упрощения конфигурирования Spring под конкретный проект и содержит ряд утилит для упрощения этого процесса, так как настройка чистого Spring может оказаться долгим делом.
Для желающих познакомиться с ним, имеется хороший мануал по работе со Spring Boot, а также официальный мануал по быстрому старту в 3 шага.
▍ Spring Data
Если приложение требует для своей работы хранения данных в реляционных или нереляционных базах, то тогда имеет смысл воспользоваться данным модулем, который предоставляет возможность работы и механизмы для взаимодействия с конкретными базами данных различных типов. Ключевым понятием Spring Data является репозиторий, хорошая статья по работе с этим модулем находится здесь.
▍ Hibernate
Немного отступая от темы, имеет смысл упомянуть и этот фреймворк. Он позволяет существенно уменьшить объём генерируемого ручного кода для взаимодействия с базами данных и представляет работу с ними в рамках модели объектно-реляционного отображения (ОРМ), в рамках которой происходит связывание полей классов с соответствующими колонками таблиц в базе данных.
Благодаря использованию Hibernate, можно уменьшить количество кода на низком уровне, так как взаимодействие с базой данных он берёт на себя, а разработчику остаётся взаимодействовать в коде, с удобным представлением базы данных в виртуальном виде.
Благодаря большому сообществу разработчиков и теоретической базе, изучение этого фреймворка существенно облегчается. Кроме того, он может взаимодействовать практически с любой базой данных.
Здесь имеется хорошая статья по поводу первого использования hibernate в своём проекте.
▍ Spring Security
Любое приложение, созданное на основе Spring, требует своей защиты, именно для этого и предназначен этот инструмент, который позволяет обеспечить поддержку аутентификации и авторизации, защиту от атак и т.д.
Кроме того, раз уж не говорим о веб-приложениях, то имеет смысл, упомянуть ещё два модуля.
▍ Spring REST
Представляет собой архитектурный стиль взаимодействия в компонентах, в рамках компьютерной сети, при котором происходит передача состояния представления, то есть, проще говоря, различные компоненты, расположенные в удалённых физически друг от друга местах, обмениваются данными в рамках определённого стиля. В рамках этого стиля обмен данными между веб-агентами может осуществляться в разных форматах — JSON, XML и т.д. Такой способ взаимодействия в рамках этого архитектурного стиля называют ещё RESTful.
Вот здесь имеется хорошая статья о разработке RESTful сервиса.
▍ Spring Web Services
Предназначен для облегчения процесса создания сервисов, поддерживающих протокол SOAP, которые обмениваются данными в формате XML. Подробное официальное руководство по созданию службы SOAP имеется здесь.
Кстати говоря, если ваше приложение является базирующимся на микросервисном подходе, то имеет смысл использовать для связи между отдельными сервисами брокер сообщений.
Из известных брокеров на память приходит два: RabbitMQ и Apache Kafka. Первый из них предназначен больше для возможности реализации достаточно сложных сценариев маршрутизации сообщений, в то время как брокер от Apache — для масштабируемых высоконагруженных систем, который к тому же обеспечивает возможность хранения сообщений и извлечения их (за нужный временной период) для целей анализа.
Тестирование
Качество разработанного программного обеспечения напрямую зависит от того, насколько финальный код не содержит ошибок. Для обеспечения качества может быть проведено юнит-тестирование и интеграционное тестирование. Первое — предназначено для проверки каждого отдельного модуля, под которым понимается проверка корректности работы элементов кода на уровне, до каждого отдельного метода включительно; в противоположность ему — интеграционное позволяет проверить корректность работы кода в целом и взаимосвязь отдельных компонентов.
▍ JUnit
Для тестирования в Java используется фреймворк JUnit. В своей последней версии он состоит из трёх компонентов:
- JUpiter — представляет собой поддержку новых моделей программирования.
- JUnit — для запуска тестирования.
- JUnit Vintage — обеспечивает обратную совместимость, для поддержки тестов, написанных для предыдущих версий JUnit.
Но тестирование в чистом виде с использованием этого фреймворка, будет не совсем удобным, так как для юнит-тестов необходимо использовать экземпляры проверяемых классов, у которых функциональность должна быть ограничена для обеспечения определённого поведения в рамках проверки. Обеспечивать подобное не совсем удобно и чревато возникновением ошибок.
Именно для этого и предназначен следующий фреймворк.
▍ Mockito
Он позволяет создать подобный объект, так называемую «заглушку» и специализируется именно на них. Таким образом, можно создать свою реализацию интерфейсов, классы с нужным функционалом, протестировать их работу на корректность.
По Mockito неплохая статья есть вот здесь.
Выше мы уже говорили о работе с базой данных и ещё раз, возвращаясь к этому вопросу, нельзя не упомянуть ещё и фреймворк Hibernate.
Использование библиотек
Перед тем как попробовать — проверьте, а может кто-то это уже делал…
Зачастую, дела именно так и обстоят и стоит проверить наличие кода, решающего вашу задачу. Ведь наверняка, другие программисты уже ломали голову над этим вопросом! Приведём несколько примеров.
Бизнес интересы зачастую требуют взаимодействия разработчиков с не совсем удобными форматами файлов, среди которых можно назвать такие, как Word или Excel. Для этого существует достаточно старое и проверенное решение: использование библиотеки Apache Tika. Как заявляют сами разработчики, библиотека поддерживает более 1000 форматов файлов, среди которых такие как: Word, Excel, PowerPoint, PDF и т.д.
Таким образом, библиотека позволяет производить парсинг файлов в перечисленных форматах и не только.
Говоря же о графическом представлении бизнес информации, одним из основных её видов являются разнообразные графики. Неплохой бесплатной библиотекой для генерации графиков является JFreeChart. Она предоставляет удобный API и позволяет выводить графики, как в векторных форматах (PDF, EPS, SVG), так и растровых (PNG, JPEG).
Так как веб-разработчикам периодически приходится иметь дело с форматом JSON, необходим соответствующий инструмент, который умеет с ним работать и проект Jackson предоставляет его, однако не ограничивается только им, в числе форматов, с которыми работает библиотека, числятся в том числе и: XML, YAML, CSV (и не только).
Повышение общей эрудиции
Требуемая скорость разработки в весьма немалой степени обеспечивается знанием предметной и смежных областей. И даже можно больше сказать, что «эрудиция — это наше всё» (ведь не зря, в конце концов, есть градация на джуниоров, мидлов и сеньоров, хе-хе).
В этом смысле, довольно информативной является следующая схема, так называемый backend roadmap. Она даёт общее понимание того, какой «джентльменский» набор знаний в предметных областях должен быть у разработчика, в зависимости от потребностей взаимодействия с определёнными технологиями. Да, время идёт, и эта схема может в большей или меньшей степени, переставать соответствовать действительности, однако общее представление она даёт, чем и интересна:
Оригинальная схема по ссылке выше хороша тем, что является кликабельной и буквально каждый её элемент ведёт на страницу с информацией касательно соответствующего вопроса.
Аналогичная схема имеется и насчёт фронтенд разработки:
Кроме того, по фронтенду имеется весьма любопытный развёрнутый FAQ.
Однако к информации, изложенной в этих схемах и FAQ, следует отнестись критически и воспринимать их в познавательном ключе для общего развития.
В качестве эпилога
Подытоживая всё вышесказанное, хочется отметить, что мы прошлись, так сказать, «по верхам», и «за кулисами» осталось множество других интересных вопросов: паттерны проектирования (как минимум, тот же самый MVC, в рамках Spring, раз уж мы заговорили о нём), структуры данных, способы оптимизации, гибкие методологии разработки и прочее прочее прочее. Но это уже потянет на целую книгу, а не на статью :)
Если попытаться выделить самое главное, то, наверное, имеет смысл на первое место поставить всё-таки эрудицию, так как наверняка у каждого найдётся как минимум 1–2 истории, когда изученные впрок технологии и подходы, неожиданно пригодились. Если бы ещё в сутках времени было чуть больше, чем 24 часа.
Конкурс статей от RUVDS.COM. Три денежные номинации. Главный приз — 100 000 рублей.