Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. Laravel 5
Code

Шаблон проектирования Репозиторий в Laravel 5

Difficulty:AdvancedLength:ShortLanguages:

Russian (Pусский) translation by Sergey Zhuk (you can also view the original English article)

Паттерн репозиторий впервые был представлен в книге Эрика Еванса Предметно-Ориентированное Проектирование. В действительности в приложении репозиторий является входной точкой для получения доступа к данным предметной области.

Проще говоря, репозиторий позволяет всей кодовой базе использовать объекты, и при этом не вдаваться в детали, как эти объекты хранятся. Репозиторий сам содержит всю необходимую информацию о том, каким образом хранятся объекты, включая преобразование таблиц базы в объекты. Это предоставляет более объектно-ориентированный подход к уровню хранения данных в приложении и делает код, который занимается преобразованиями объектов более инкапсулированным.

Единственный способ заставить ваши репозитории работать в проекте Laravel (именно так как они описаны Эриком Евансом в его книге) - изменить используемую ORM по умолчанию с active record на data mapper. Лучшей заменой является Doctrine.

Doctrine ORM

Doctrine является ORM (объектно-реляционноым отображением), которое реализует паттерн data mapper, что позволяет сделать чистым разделение между бизнес логикой приложения и уровнем хранения данных в базе. Doctrine использует DQL вместо SQL. DQL предоставляет язык объектных запросов, имея в виду что вместо традиционных реляционных выражений, будут использоваться запросы с объектными выражениями.

Это позволяет составлять запросы к базе данных в объектно-ориентированном стиле и помогает, когда нужно выполнить запрос к базе таким способом, который недоступен простыми методами репозитория. По моему мнению DQL является наиболее мощным способом поддерживать связь с базой данных.

Doctrine vs. Eloquent

Сущности Doctrine являются обыкновенными классами PHP и не добавляют дополнительных расходов на наследование ORM. Doctrine управляет несколькими запросами в одной иерархии без обращения к базе данных, то есть объект сущности существует для всего запроса.

Другой интересной возможностью Doctrine является то, что вместо написания миграций для создания схемы базы, база автоматически создается так, чтобы отражать мета данные, описанные в аннотациях сущностей. С другой стороны Eloquent является менее сложной и очень легкой в использовании.

Подробное сравнение этих двух ORM потребовало бы отдельной статьи. Как вы видите, объект Doctrine является более абстрактным. Однако Doctrine будет удовлетворять потребности только специфичных проектов, что может приводить иногда к некоторым накладным расходам. Я считаю, что выбор подходящей ORM для приложения полностью зависит от предпочтений программиста.

Приложение Блог

Пришло время создать простое приложение с блогом на Laravel. Сперва нам следует настроить Doctrine. Существует специальная версия ORM для использования в проектах Laravel 5. Чтобы установить Doctrine 2 в наш проект Laravel, нужно выполнить следующую команду:

Как обычно пакет следует добавить в app/config.php с помощью service provier'a

Так же следует настроить псевдоним:

В заключении мы публикуем настройки пакета:

Теперь все готово.

Сущности являются важной частью приложения App\Entities\Post.php:

Теперь пришло время создать Репозиторий, который был описан ранее. App/Repositories/PostRepo.php :

Контроллер:App/Http/Controllers/PostController.php :

Как видно я использовал пакет Flash для управления сообщениями (можно использовать пакет поставляемый с Laravel). Что касается валидатора, я хотел бы добавить, что вы можете создать свой собственный (так как это сделал я) или использовать предоставляемый в Laravel по умолчанию, все зависит от ваших предпочтений.

Файлы отображения такие же как и обычно. В этом примере отображения файл будет таким наresources/views/admin/edit.blade.php :

Маршрутизация и другие операции останутся без изменений.

Заключение

Теперь вы видите как можно легко создать репозиторий на основе Doctrine в проекте Laravel 5.0, что будет иметь множество преимуществ.

Для тех из вас кто только начинает изучать Laravel или стремиться расширить свои знания, сайт или приложения с расширениями, мы предоставляем множество вещей для изучения в Envato Market.

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.