Pular para o conteúdo

Padrão Repositório em XOOPS

2.5.x ✅ 4.0.x ✅

O Padrão Repositório é um padrão de acesso de dados que abstrai operações de banco de dados, fornecendo uma interface limpa para acessar dados. Ele atua como um intermediário entre a lógica de negócio e as camadas de mapeamento de dados.

O Padrão Repositório fornece:

  • Abstração de detalhes de implementação de banco de dados
  • Mock fácil para testes unitários
  • Lógica centralizada de acesso de dados
  • Flexibilidade para alterar banco de dados sem afetar lógica de negócio
  • Lógica de acesso a dados reutilizável em toda a aplicação

Use Repositórios quando:

  • Transferindo dados entre camadas de aplicação
  • Precisando alterar implementação de banco de dados
  • Escrevendo código testável com mocks
  • Abstraindo padrões de acesso de dados
<?php
// Definir interface de repositório
interface UserRepositoryInterface
{
public function find($id);
public function findAll($limit = null, $offset = 0);
public function findBy(array $criteria);
public function save($entity);
public function update($id, $entity);
public function delete($id);
}
// Implementar repositório
class UserRepository implements UserRepositoryInterface
{
private $db;
public function __construct($connection)
{
$this->db = $connection;
}
public function find($id)
{
// Implementação
}
public function save($entity)
{
// Implementação
}
}
?>
<?php
class UserService
{
private $userRepository;
public function __construct(UserRepositoryInterface $userRepository)
{
$this->userRepository = $userRepository;
}
public function registerUser($username, $email, $password)
{
// Verificar se usuário existe
if ($this->userRepository->findByUsername($username)) {
throw new \InvalidArgumentException('Username exists');
}
// Criar usuário
$user = new User();
$user->setUsername($username);
$user->setEmail($email);
$user->setPassword($password);
return $this->userRepository->save($user);
}
}
?>
  • Use interfaces para definir contratos de repositório
  • Cada repositório lida com um tipo de entidade
  • Mantenha lógica de negócio em serviços, não em repositórios
  • Use objetos de entidade para mapeamento de dados
  • Lance exceções apropriadas para operações inválidas

Veja também:


Tags: #repository-pattern #data-access #design-patterns #module-development