Мне кажется, что Тэйлор и я ввели в заблуждение некоторых из вас в сообществе Laravel. Похоже, после нескольких статей о внедрении зависимостей через IoC и шаблоне репозитория, как будто стало стандартом де факто использование репозиториев ждя всех приложений на Laravel 4.
Хотя репозитории очень хороши, остается один маленький вопрос: «понадобится ли мне когда-нибудь такой уровень абстракции»? Иногда ответ на него — твердое нет. В других случаях вы быстро создаете прототип и тем более не хотите возиться с дополнительной абстракцией, так как вы знаете, что всё равно последует длительный период рефакторинга. А правда в том, что репозитории и соглашения (contracts) хороши, когда вы ожидаете изменений в определённой части кода и при этом хотите сохранить для него определенное API.
Вчера я выпустил первую реализацию OrderMVC для Laravel 4. И сразу начал получать вопросы, почему в проекте не используются репозитории. Дело в том, что проект не стал бы намного лучше от их использования. В руководстве по применению OrderMVC говорится, что в проектах лучше использовать родную ORM настолько, насколько это возможно. Помимо этого, проект демонстрирует фреймворк, а не шаблоны архитектуры или то, как работает PHP. Более высокие уровни абстракции не дадут понять пользователям, как работает Laravel, и потребуют больше времени для того, чтобы разобраться.
В своих собственных проектах учитывайте вашу аудиторию. Возможно, вы будете использовать кэширование для быстрого сохранения результатов (или другие способы работы с вашими данными перед/после работы с ORM)? Если проект краткосрочный, в котором не используется TDD, то рискните и не используйте репозитории! Иначе вы скоро начнёте работу над архитектурой приложения и неожиданно обнаружите, что создали 30 интерфейсов на протяжении проекта в хакатоне. Это обременяет.
Однако есть случаи, когда определенно стоит использовать репозитории. Я рекомендую использовать их при создании пакетов, тогда у вас будут четкие указания для разработчиков, если они захотят создать другую реализацию. Также если проект долгосрочный и вы планируете оптимизировать запросы (кэширование результатов), или если вы планируете добавить в приложение тесты.
Поэтому, в следующий раз подумайте, действительно ли стоит использовать этот репозиторий. Возможно, вместо молотка вам просто подойдёт отвёртка.