Skip to content

Latest commit

 

History

History
161 lines (135 loc) · 12.5 KB

video2.2.md

File metadata and controls

161 lines (135 loc) · 12.5 KB

Обзор наиболее востребованных технологий, которые будут изучаться на курсе TopJava. Frameworks Spring, ORM

Frameworks

Мы переходим к фреймворкам. Фреймворки нам нужны, чтобы использовать готовое решение для стандартной задачи и дописать только нужную для нас бизнес-логику. В чем-то есть сходство с паттерном "шаблонный метод", где определяют скелет алгоритма, перекладывая ответственность за некоторые его шаги на подклассы. Здесь же определяется скелет архитектуры, ее базовые классы, и даются различные реализации. Мы можем выбрать любую из них или написать собственную.

Например, если мы создаем обычное web-приложение, чтобы принимать HTTP-запросы и отдавать HTTP-ответы, нам не нужно создавать все web-компоненты с нуля, мы берем готовый web-фреймворк (например, Spring MVC) и дописываем специфичную для нашего конкретного случая бизнес-логику. Значительная часть кода за нас уже написана и протестирована. Веб-приложение - это, безусловно, не единственный пример. Могут быть приложения, которые занимаются запуском каких-то периодических задач и не принимают HTTP-запросов. Это может быть приложение, которое только общается с брокером сообщений (например, RabbitMQ или Kafka): принимает сообщения и отправляет в него сообщения. Для множества подобных задач существуют специальные фреймворки с готовыми решениями.

Одна бэкенд-система может иметь в себе множество компонентов, включающих разные виды упомянутых приложений. Подавляющее большинство современных приложений работают с HTTP (это взаимодействие с UI в браузере или между сервисами по REST). Поэтому на этом курсе мы создаем как веб-приложение, работающее с UI, так и REST API, готовое для интеграции с любыми другими сервисами (например, с мобильным приложением).

JVM Ecosystem Report 2021 показывает, что Spring является абсолютным лидером среди фреймворков.

На первом месте упоминается Spring Boot, а на втором - Spring MVC.

Здесь хотелось бы внести некоторую ясность. "Сердцем" Spring является Spring Core, который реализует Dependency Injection.
Этот компонент, как правило, используется во всех остальных проектах Spring Framework.

Spring Boot - это надстройка над Spring Framework, которая позволяет быстро создавать приложения разных типов, использовать автоматическую конфигурацию для некоторых компонентов и использовать некоторые удобные встроенные инструменты, например, готовые инструменты для мониторинга работы приложения (Spring Actuator).

Если мы создаем web-приложение, то мы можем создавать его с помощью Spring Boot, но Spring MVC, который является именно web-фреймворком, также будет присутствовать в таком приложении и играть ключевую роль.

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

В этом случае Spring Boot в какой-то степени может даже навредить вашей продуктивности, потому что вам придется разбираться, какие автоконфигурационные классы отключить, и т. д.

Мы изучаем Spring довольно глубоко. Традиционно хорошо показал себя подход, при котором вначале изучается чистый Spring Framework, после чего мы переходим к использованию Spring Boot. Такой подход сохраняется и в этой версии курса. Без этого Spring Boot будет для вас "черным ящиком", который вам будет очень сложно понять, настраивать и отлаживать.

ORM frameworks

Отчеты, которые мы использовали, обычно не включают информацию о самых популярных ORM-фреймворках.

Известно, что Hibernate является достаточно популярным фреймворком и наиболее часто упоминается в вакансиях, если сравнивать его с другими ORM-фреймворками и инструментами для работы Java-приложения с базами данных.

Вот одна из статей, которая также говорит о популярности Hibernate: Top 5 Java ORM tools - 2022

ORM или Object-relational-mapping можно перевести как "объектно-реляционное отображение (преобразование)".
Это техника, которая позволяет создать виртуальную базу данных с помощью объектно ориентированного языка программирования и взаимодействовать с ней, в то время как взаимодействие уже с реальной базой данных выполняется фреймворком незаметно для нас. Это облегчает работу, позволяет работать с привычными и удобными для использования Java-объектами, вызывая их методы, вместо того, чтобы писать SQL-запросы к базе данных и код для интерпретации полученных данных.

Hibernate является реализацией спецификации JPA, так же, как и менее популярный EclipseLink.

Говоря простым языком, JPA (Java Persistence API) - это набор интерфейсов без реализации для работы с ORM, который включен в стандарт Java EE. Отдельные провайдеры могут предоставлять свои реализации этого интерфейса.

Недостатками JPA и его реализации Hibernate являются удар по производительности и недостаточная гибкость. Вопрос производительности частично может быть решен с помощью различных техник оптимизации кода, написанного с использованием JPA, однако для некоторых приложений тот оверхед, который несет в себе JPA, является недопустимым, и вы можете увидеть на некоторых проектах использование других подходов, от использования чистого JDBC до использования MyBatis, JOOQ или каких-то альтернативных решений.

В реальных приложениях те запросы к базе данных, которые создают наибольшую нагрузку на систему, могут быть оптимизированы для улучшения производительности: для них могут быть применены JDBC, альтернативные JPA-фреймворки, также запросы могут быть написаны с помощью нативных SQL-запросов в JPA. Для остальных запросов, которые не приводят к большой нагрузке на систему, в том же приложении может быть применен Hibernate. Таким образом, в одном приложении могут быть применены одновременно разные технологии.

На курсе вы изучите, как работать с БД с помощью нескольких технологий: JDBC (а точнее, Spring JDBC template), а также JPA и Spring DataJPA. Вы сами не только увидите, но и почувствуете при написании кода в ваших домашних заданиях плюсы и минусы каждого подхода.

Обзор пройденных тем

Давайте подведем промежуточные итоги по результатам этого урока.

В этом уроке мы:

  • познакомились с тем, что такое фреймворки и для чего они нужны;
  • посмотрели статистику, которая определяет Spring Framework как самый популярный фреймворк на рынке;
  • познакомились с ORM - подходом для упрощения работы с базами данных с использованием объектно-ориентированного подхода;
  • узнали про JPA (Java Persistence API) - протокол для работы с ORM - и про реализации JPA, среди которых Hibernate является самой популярной;
  • обсудили недостатки подхода ORM и познакомились с инструментами, которые могут быть использованы в качестве альтернативы.

В следующем коротком уроке мы завершим обзор используемых технологий. Увидимся в следующем видео.