Что такое ORM

ORM (Object Relational Mapping) — это техника, которая связывает полноценные объекты языка программирования с таблицами в реляционной системе управления базами данных.

С помощью ORM можно манипулировать данными в базе данных через объекты, не прибегая к написанию SQL-запросов вручную. Это достигается за счет автоматического преобразования объектов в строки таблиц базы данных и обратно. Такой подход не только упрощает работу с данными в объектно-ориентированных системах, но и позволяет взаимодействовать с ними на более интуитивном уровне благодаря повышению абстракции.

Фреймворки ORM

Примеры фреймворков которые реализуют ORM, каждый же в свою очередь под капотом использует паттерн (шаблон) для работы с данными:

PHP

  • Doctrine. Популярный ORM для PHP. Основан на паттерне Data Mapper
  • Eloquent. ORM, используемый в Laravel. Основан на паттерне Active Record

Java

  • Hibernate. Cамый популярный ORM-фреймворк для Java
  • JPA. Стандартный интерфейс для управления реляционными данными в Java

Что используют фреймворки под капотом

  • Active Record — это шаблон проектирования или один из слоев приложения, который несет ответственность за представление бизнес-логики и данных. Active Record позволяет создавать и использовать более просто те объекты, который требуют постоянного хранения в базе данных. Если говорить в отношении MVC, то Active Record реализует первую букву М — то есть модель. В Active Record сама модель также отвечает и за сохранение данных в базу данных. А это означает, что нарушается первый принцип из SOLID — принцип единственности ответственности. Класс отвечает не только за представление данных, но и за сохранение
  • Data Mapper — это слой доступа к данным, который предоставляет двунаправленный маппинг данных между постоянным хранилищем данных и хранением данных в памяти. В отличие от Active Record, в Data Mapper появляется еще один слой или тип сущности такой как entityManager. Именно этот слой будет отвечать за перенос состояния модели в базу данных и обратно
  • DAO (Data Access Object)/Repository Pattern — слой абстракции доступа к данным, обычно самописные

Разные фичи реализации

  • Eager Loading — жадная загрузка связанных объектов сущности одновременно с основным объектом. Предотвращает множество дальнейших запросов, но плохо сказывается на быстроте выполнения чтения
  • Lazy Loading — ленивая загрузка, позволяющая оптимизировать процесс чтения и получать связанные объекты только при необходимости
  • Identity Map — жадное получение объекта из базы данных 1 раз в рамках сессии. Позволяет избегать возможного противоречия в данных, возникающих из-за нескольких запросов
  • Unit of Work — собирает все изменения во всех объектах и позволяет выполнить их в рамках одной транзакции. Благоприятно сказывается на консистентности данных и количестве запросов

Заключение

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

ORM является стандартом индустрии и позволяет разработчику работать бензопилой, а не топором.

Запись опубликована в рубрике Это база с метками , , . Добавьте в закладки постоянную ссылку.

Добавить комментарий