# Backend Architecture Repository Pattern

> Data access abstraction, repository pattern.

- Skill: `valec3/backend-architecture-repository-pattern` (Agent Skill)
- Install (CLI): `npx skillmds add valec3/backend-architecture-repository-pattern`
- Raw SKILL.md: https://api.skillmd.com/api/skills/valec3/backend-architecture-repository-pattern/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: AI & ML
- Author: valec3 (https://skillmd.com/u/valec3)
- Updated: 2026-09-10
- Page: https://skillmd.com/skills/valec3/backend-architecture-repository-pattern

---


# Backend Architecture Repository Pattern

## When to use this skill
- Abstracting data access
- Multiple data sources
- Testability
- Complex queries

## Workflow
- [ ] Create repository interface
- [ ] Implement repository
- [ ] Inject into services
- [ ] Abstract query logic
- [ ] Keep repositories focused

## Instructions

### Interface
```php
<?php

namespace App\Repositories;

interface UserRepositoryInterface
{
    public function find(int $id): ?User;
    public function findByEmail(string $email): ?User;
    public function save(User $user): User;
}
```

### Implementation
```php
<?php

namespace App\Repositories;

class UserRepository implements UserRepositoryInterface
{
    public function __construct(
        private UserModel $model
    ) {}

    public function find(int $id): ?User
    {
        return $this->model->find($id);
    }

    public function findByEmail(string $email): ?User
    {
        return $this->model->where('email', $email)->first();
    }
}
```

## Resources
- Abstract data access
- Easy to mock for testing
- Switch data sources easily

