Přeskočit na obsah

Vzor úložiště v XOOPS

2.5.x ✅ 4.0.x ✅

:::poznámka[Nejste si jisti, zda je to správný vzor?] Viz Volba vzoru přístupu k datům pro rozhodovací strom porovnávající obslužné programy, úložiště, služby a CQRS. :::

Vzor úložiště je vzor přístupu k datům, který abstrahuje databázové operace a poskytuje čisté rozhraní pro přístup k datům. Funguje jako prostředník mezi obchodní logikou a vrstvami mapování dat.

Vzor úložiště poskytuje:

  • Abstrakce detailů implementace databáze
  • Snadné zesměšňování pro testování jednotek
  • Centralizovaná logika přístupu k datům
  • Flexibilita při změně databáze bez ovlivnění obchodní logiky
  • Znovu použitelná logika přístupu k datům v celé aplikaci

Kdy použít úložiště

Sekce “Kdy použít úložiště”

Používejte úložiště, když:

  • Přenos dat mezi aplikačními vrstvami
  • Potřeba změnit implementaci databáze
  • Psaní testovatelného kódu pomocí simulací
  • Abstrahování vzorů přístupu k datům
<?php
// Define repository interface
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);
}
// Implement repository
class UserRepository implements UserRepositoryInterface
{
private $db;
public function __construct($connection)
{
$this->db = $connection;
}
public function find($id)
{
// Implementation
}
public function save($entity)
{
// Implementation
}
}
?>
<?php
class UserService
{
private $userRepository;
public function __construct(UserRepositoryInterface $userRepository)
{
$this->userRepository = $userRepository;
}
public function registerUser($username, $email, $password)
{
// Check if user exists
if ($this->userRepository->findByUsername($username)) {
throw new \InvalidArgumentException('Username exists');
}
// Create user
$user = new User();
$user->setUsername($username);
$user->setEmail($email);
$user->setPassword($password);
return $this->userRepository->save($user);
}
}
?>
  • Použijte rozhraní k definování smluv o úložišti
  • Každé úložiště zpracovává jeden typ entity
  • Udržujte obchodní logiku ve službách, nikoli v úložištích
  • Používejte objekty entit pro mapování dat
  • Vyhoďte příslušné výjimky pro neplatné operace

Související dokumentace

Sekce “Související dokumentace”

Viz také:


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