Задать вопрос

Репозиторий и ActiveRecord, хорошая ли идея возвращать модели?

Несколько месяцев разрабатывал на laravel5 и понял, что весьма накосячил с репозиториями, а точнее КПД получил примерно 0. Сейчас пытаюсь понять, как все это дело исправить и узнать мнения разных спецов.

Когда я лазил по интернету, то находил различные приложения, где примерно так-же косячат как и я. Вот пример такого приложения:
https://github.com/Bottelet/Flarepoint-crm/

Репозиторий:
https://github.com/Bottelet/Flarepoint-crm/blob/de...

Собственно какие тут проблемы:
- логика в репозитории
- дубль запроса в методе update (мы передаем $id, из модели, чтобы получить модель). У себя в приложении я накосячил еще более жестче, так как передавал еще и модель, чтобы избавиться от этого запроса.
- нарушение единой ответственности (bcrypt)
- возврат модели в качестве результата из репозитория.

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

От сюда вопрос, зачем тут репозитории, если это абстрактное хранилище над моделями, а не абстрактное хранилище в целом?

Ну и основной вопрос, в правильном ли я направлении формирую мысли, и как подобный подход с репозиториями можно реализовать правильно ?
  • Вопрос задан
  • 3525 просмотров
Подписаться 19 Оценить 4 комментария
Решение пользователя Вячеслав Плиско К ответам на вопрос (4)
AmdY
@AmdY
PHP и прочие вебштучки
Это типичный пример, когда люди не сами доходят до паттернов, а начитываются умных книг и суют свои репозитории и ддд без понятия зачем это нужно.
Сколько уже статей видел об использовании репозиториев в laravel, все прдлагают куегкт Model::all() и т.д. Плевать, что возвращают всё тот же Eloquent, который пытаются убрать.

В проектах на symfony даже при наличии doctrine творится такой же ад. То. что люди не умеют делать нормальные репозитории указывает на то, что оно им и не надо было такой абстракции. Для 99% проектов вообще не стоит тащить абстракции вроде репозиториев.
Ответ написан