Абстракция доступа к данным: коллекция доменных объектов в памяти. Клиент работает с сущностями, не зная о SQL/хранилище.
interface UserRepositoryInterface {
public function find(int $id): ?User;
public function save(User $user): void;
public function findByEmail(string $email): ?User;
}
class EloquentUserRepository implements UserRepositoryInterface {
public function find(int $id): ?User { return User::find($id); }
// ...
}Плюсы: тестируемость (подмена на in-memory), смена хранилища, единая точка доступа к данным.