Como implementar o padrão Repository em PHP?
O padrão Repository em PHP é uma abordagem que separa a lógica de acesso a dados da camada de negócios da aplicação. Ele torna o código mais organizado, reutilizável e fácil de testar.
Implementação do Padrão Repository
<?php
class Usuario {
public $id;
public $nome;
public $email;
public function __construct($id, $nome, $email) {
$this->id = $id;
$this->nome = $nome;
$this->email = $email;
}
}
class UsuarioRepository {
private $usuarios = [];
public function adicionar(Usuario $usuario) {
$this->usuarios[$usuario->id] = $usuario;
}
public function buscarPorId($id) {
return $this->usuarios[$id] ?? null;
}
}
$repositorio = new UsuarioRepository();
$repositorio->adicionar(new Usuario(1, "Carlos", "carlos@email.com"));
$usuario = $repositorio->buscarPorId(1);
echo $usuario->nome;
?>
Explicação do Código
- Criamos a classe
Usuario
, representando um usuário do sistema. - Implementamos o
UsuarioRepository
, responsável por gerenciar os usuários armazenados. adicionar()
permite adicionar um novo usuário ao repositório.buscarPorId()
retorna um usuário com base no seu ID.
Por que utilizar o padrão Repository no PHP?
O padrão Repository melhora a organização do código ao separar a camada de dados da camada de regras de negócio. Ele facilita a manutenção e reutilização do código, sendo amplamente utilizado em frameworks modernos como Laravel e Symfony.
Algumas aplicações:
- Separação da lógica de acesso a dados da camada de negócios
- Facilidade na manutenção e escalabilidade da aplicação
- Melhoria na testabilidade do código
- Aplicação em frameworks PHP modernos como Laravel e Symfony
Dicas para quem está começando
- Use Repository para centralizar a lógica de acesso a dados.
- Evite consultas diretas dentro de controladores, delegando essa responsabilidade ao Repository.
- Implemente interfaces para tornar o código mais flexível.
- Teste seus repositories separadamente para garantir a integridade dos dados.
- Utilize o padrão Repository em conjunto com ORM, como o Eloquent do Laravel.
Contribuições de Daniel Moreira