Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Задачи

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про PHP: repository, pattern

Репозиторий в Laravel — зачем и когда?

Этот вопрос проверяет понимание паттерна Repository и его применения в Laravel для абстракции доступа к данным и улучшения тестируемости кода.

Короткий ответ

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

Длинный ответ

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

Зачем использовать репозитории

Абстракция доступа к данным

  • Скрывает детали реализации хранения данных

  • Позволяет легко менять источник данных (БД, API, файлы)

Централизация логики запросов

  • Повторное использование сложных запросов

  • Единое место для модификации запросов

class UserRepository {
    public function findActiveUsers(): Collection {
        return User::where('active', true)
                   ->with('profile')
                   ->orderBy('created_at', 'desc')
                   ->get();
    }
    
    public function findUsersWithRecentActivity(int $days = 7): Collection {
        return User::whereHas('activities', function ($query) use ($days) {
            $query->where('created_at', '>=', now()->subDays($days));
        })->get();
    }
}

Упрощение тестирования

  • Легко мокать репозитории в тестах

  • Изоляция бизнес-логики от базы данных

// Тестирование сервиса с моком репозитория
public function test_user_creation() {
    $userRepository = Mockery::mock(UserRepository::class);
    $userRepository->shouldReceive('create')
                   ->once()
                   ->andReturn(new User());
    
    $service = new UserService($userRepository);
    $result = $service->createUser(['name' => 'John']);
    
    $this->assertInstanceOf(User::class, $result);
}

Когда использовать репозитории

Сложные приложения

  • Когда запросы к базе данных сложные и повторяются

  • При необходимости легко менять реализацию хранения

Тестирование

  • Когда важна простота unit-тестирования

  • Для изоляции тестов от базы данных

Multiple источники данных

  • Когда данные приходят из разных источников

  • При интеграции с внешними API

Реализация репозитория в Laravel

interface UserRepositoryInterface {
    public function find(int $id): ?User;
    public function create(array $data): User;
    public function update(User $user, array $data): bool;
    public function delete(User $user): bool;
    public function findByEmail(string $email): ?User;
}

class EloquentUserRepository implements UserRepositoryInterface {
    public function find(int $id): ?User {
        return User::find($id);
    }
    
    public function create(array $data): User {
        return User::create($data);
    }
    
    // ... остальные методы
}

// Регистрация в Service Provider
$this->app->bind(UserRepositoryInterface::class, EloquentUserRepository::class);

Когда репозитории не нужны

Простые CRUD приложения

  • Когда запросы простые и не повторяются

  • Для маленьких проектов с минимальной бизнес-логикой

Ограниченное время разработки

  • Когда overhead от создания репозиториев не оправдан

Вывод

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

  • Аватар

    PHP Guru

    Mikhail Savin

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.

Уровень

  • Рейтинг:

    4

  • Сложность:

    5

Навыки

  • PHP

    PHP

Ключевые слова

#repository

#pattern

Подпишись на PHP Developer в телеграм

  • Аватар

    PHP Guru

    Mikhail Savin

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.