Le pattern Repository isole l'accès aux données derrière une classe qui expose des méthodes métier comme findById ou save. Le reste de l'application ignore le SQL, ce qui simplifie les tests et permet de changer de stockage sans réécrire la logique.
Exemple
class UserRepository {
public function findById(int $id): ?User { /* ... */ }
}