Aller au contenu

Modèle Repository dans XOOPS

2.5.x ✅ 4.0.x ✅

Le modèle Repository est un modèle d’accès aux données qui abstrait les opérations sur la base de données, fournissant une interface propre pour accéder aux données. Il agit comme intermédiaire entre la logique métier et les couches de mappage de données.

Le modèle Repository fournit :

  • Abstraction des détails d’implémentation de la base de données
  • Facilité de simulation pour les tests unitaires
  • Logique d’accès aux données centralisée
  • Flexibilité pour changer la base de données sans affecter la logique métier
  • Logique d’accès aux données réutilisable dans l’application

Utilisez les dépôts quand :

  • Transférer des données entre les couches de l’application
  • Avoir besoin de changer l’implémentation de la base de données
  • Rédiger du code testable avec des mocks
  • Abstraire les modèles d’accès aux données
<?php
// Définir l'interface du dépôt
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);
}
// Implémenter le dépôt
class UserRepository implements UserRepositoryInterface
{
private $db;
public function __construct($connection)
{
$this->db = $connection;
}
public function find($id)
{
// Implémentation
}
public function save($entity)
{
// Implémentation
}
}
?>
<?php
class UserService
{
private $userRepository;
public function __construct(UserRepositoryInterface $userRepository)
{
$this->userRepository = $userRepository;
}
public function registerUser($username, $email, $password)
{
// Vérifier si l'utilisateur existe
if ($this->userRepository->findByUsername($username)) {
throw new \InvalidArgumentException('Username exists');
}
// Créer l'utilisateur
$user = new User();
$user->setUsername($username);
$user->setEmail($email);
$user->setPassword($password);
return $this->userRepository->save($user);
}
}
?>
  • Utilisez les interfaces pour définir les contrats du dépôt
  • Chaque dépôt gère un type d’entité
  • Gardez la logique métier dans les services, pas dans les dépôts
  • Utilisez les objets d’entité pour le mappage de données
  • Lancez les exceptions appropriées pour les opérations invalides

Voir aussi :


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