Подтвердить что ты не робот

Репозитории Laravel

В чем преимущества репозиториев в Laravel? По-видимому, это абстрагирование слоя модели из бизнес-логики приложения. Хотя на самом деле просто кажется, что весь жизненный цикл запроса просто намного сложнее для небольшого выигрыша.

Может ли кто-то пролить свет на преимущества репозиториев Laravel 4?


Изменить

После использования репозиториев в течение некоторого времени я бы добавил следующее:

  • Репозитории обеспечивают единую ответственность.
  • Репозитории должны возвращаться только к коллекции объектов
  • Несмотря на то, что отдельные от инъекции зависимостей понятны братья
  • Абстракция хранения для реальной реализации хранилища (например, MySQL)
  • Более легкое тестирование
4b9b3361

Ответ 1

Репозитории, как и в предоставленном учебнике, не являются обязательными для Laravel. Скорее, это форма инъекции IoC, которая возможна с Laravel. Любой объект, который можно аналогичным образом впрыскивать, не означает, что он репозиторий. Смотрите видео на хороший пример от Тейлора Отуэлла, который также использует "репозиторий": http://vimeo.com/53029232.

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

Ответ 2

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

Одним из основных способов использования репозиториев является создание различной привязки (с использованием интерфейсов для определения ваших функций и с помощью app.bind связывать различные реализации функции по мере необходимости). например: два отдельных репозитория (реализация родительского репозитория/интерфейса), обрабатывающие базу данных и файлы для бэкэнд-данных.

Надеюсь, это поможет. Спасибо!

Ответ 3

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

Ответ 4

В дополнение к другим ответам здесь стоит отметить, что репозитории, используемые при использовании в Laravel, могут добавить дополнительный уровень выразительности. Возьмем, например, следующее:

$users = User::whereHas("role", function($q) {
    $q->where('name', 'moderator');
}, '<', 1)->get();

Код трудно читать и неудобно смотреть. Он может быть инкапсулирован в методе репозитория и демонстрирует гораздо более четкое назначение кода:

$users = $userRepository->getUsersWhoAreNotModerators();

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