Основы ORM в Magento 2 – Модели, Ресурсы модели и Коллекции

Основы ORM в Magento 2 – Модели, Ресурсы модели и Коллекции



В Magento 2 также, как и в Magento 1, используется ORM (объектно-реляционное отображение). Здесь также участвует шаблон Active Record (AR), который использует классы Модели, Ресурсной модели и Коллекции модели. Это позволяет использовать CRUD-функции в ваших собственных модулях, т.е., управлять данными в базе данных: создавать (create), читать (read), обновлять (update) и удалять (delete) данные.

ORM в Magento 2 используется реализациями Репозитория, которые являются частью сервисных контрактов (service contracts). Это важное отличие от Magento 1, так как модуль больше не должен зависеть от других модулей (использующих, возможно, разный ORM), а вместо этого использовать только хранилища сущностей.

 

Элементы ORM в Magento 2 следующие:

  • Модели – данные и поведение, представляющее сущности.
  • Ресурсные модели – отображение данных для структуры хранения.
  • Коллекции представляют собой инкапсулированные наборы моделей и связанные с ними функции, такие как фильтрация, сортировка и разбиение на страницы. Широко используются для хранения набора объектов определенного типа.
  • Ресурсы включают соединения с базой данных через адаптеры.

 

 

Концепция ORM в Magento 2 требует, чтобы только модели могли содержать данные и манипулировать ими. При создании новой модели, которая взаимодействует с базой данных, модели необходимо знать, какую Ресурсную модель следует использовать. Вот почему имя класса Ресурсной модели задается с помощью метода _init() в защищенной функции _construct(). Это необходимо для поддержки унаследованных методов getResource() и getCollection() класса AbstractModel.

 

Чтобы создать CRUD Модель, вы просто создаете класс и расширяете его с \Magento\Framework\Model\AbstractModel. Обратите внимание, что вы вызываете _init из метода конструктора с одним подчеркиванием, а не реального PHP конструктора с двойным подчеркиванием. Этот метод _construct() вызывается реальным методом __construct(), который унаследован через класс AbstractModel.



Ресурсная модель расширяется классом \Magento\Framework\Model\ResourceModel\Db\AbstractDb.

Коллекция расширяется классом \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection.

 

При создании Коллекции ресурсов необходимо указать, с какой моделью она соотносится, чтобы Коллекция могла создавать экземпляры соответствующих классов после загрузки списка записей. Также необходимо знать соответствующую Ресурсную модель, чтобы иметь возможность доступа к базе данных. Вот почему имена классов Модели и Ресурсной модели задаются с помощью метода _init() в защищенном методе _construct().

 

 

В Модели Magento2 используются CRUD методы load(), save() и delete(), которые соотносятся с Ресурсной моделью. Если вы хотите писать более безопасный код, не используйте CRUD методы в Модели, поскольку они могут быть удалены в будущем. Вместо этого Модель следует передавать непосредственно в CRUD методы в Ресурсной модели. Модель не имеет прямого доступа к базе данных, он есть только у Ресурсной модели.

 

Ресурсная модель обращается к базе данных через \Magento\Framework\Db\Adapter\Pdo и Zend\Db.

 

API, который используется для Коллекций, реализуется через \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection.

 

Коллекция ресурсов необходима для создания набора экземпляров Модели и работы с ними. Коллекции ресурсов делают ленивую загрузку (lazy load) набора записей, который они представляют. При первом обращении к списку элементов Коллекция будет загружена автоматически. После этого Коллекция не будет загружаться снова, даже если метод load() вызван явно.

 

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

Это решает следующие задачи:

  • Предоставляет контейнер для хранения коллекций объектов.
  • Предотвращает ненужную загрузку данных.
  • Хранит все объекты во время сеанса.
  • Предоставляет интерфейс для фильтрации и сортировки объектов определенного вида.

 

 

 

Сервисные контракты в Magento 2

Сервисные контракты (service contracts) – это набор интерфейсов, с помощью которых в модулях можно объявлять стандартные API. С их помощью можно делать настройку без необходимости углубляться в ядро, а также они улучшают функциональную совместимость модулей.

 

Сервисные контракты выполняют ряд важных функций, таких как:

  • Улучшение процесса обновления
  • Формализация процесса кастомизации
  • Разделение функциональности модулей

 

 

В Magento 2 реализована концепция «разработка на основе интерфейса», в которой разработчик полагается только на публичные методы, объявленные в интерфейсе, а не на имплементацию:

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

 

 

Теперь в Magento 2 вы можете настроить модуль, используя интерфейс API, который взаимодействует с Моделью, без непосредственного взаимодействия с ядром, что намного безопаснее.

 

 

Фабрика объектов в Magento 2

В объектно-ориентированном программировании фабричный (factory) метод – это метод, который используется для создания экземпляра объекта. Фабричные методы дают разработчику возможность контролировать, какие объекты фактически возвращаются в данном контексте.

В Magento 2 каждая CRUD модель имеет соответствующий фабричный класс. Все имена классов фабрики – это название класса Модели, к которому добавлено слово «Factory».

Фабричные классы в Magento 2 – это еще один пример использования системы автоматической генерации кода. Всякий раз, когда Менеджер объектов в Magento 2 встречает имя класса, оканчивающееся на слово Factory, он автоматически генерирует данный класс в папке generated/code, если такой класс еще не существует.

 

 

 

Краткий итог

В сегодняшней статье мы рассмотрели основы ORM и CRUD в Magento 2. Команда разработчиков Magento 2 делает основной упор на Репозиториях, сервисных контрактах и различных транспортных уровнях API, которые обеспечивают эти CRUD функции. Данных изменений мы коснулись вскользь, поскольку это является очень обширной темой. И она заслуживает большей детализации. Сегодня же мы уделили внимание основам ORM шаблона ActiveRecord, в котором используются классы Модели, Ресурсной модели и Коллекции модели. Ведь эти модели остаются жизненно важной частью любого инструментария разработчика на Magento 2.

 



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

Ваш e-mail не будет опубликован. Обязательные поля помечены *