Skip to content

Uzorak spremišta u XOOPS

2.5.x ✅ 4.0.x ✅

Radi danas i sutra

Uzorak spremišta radi u XOOPS 2.5.x i XOOPS 4.0.x. U 2.5.x, zamotajte svoj postojeći XoopsPersistableObjectHandler u repozitorij class kako biste dobili prednosti apstrakcije:

PristupXOOPS 2.5.xXOOPS 4.0
Izravni pristup rukovateljaxoops_getModuleHandler()Preko DI spremnika
Omotač spremišta✅ Preporučeno✅ Izvorni uzorak
Testiranje s mockovima✅ S ručnim DI✅ Automatsko ožičenje kontejnera

Počnite s uzorkom repozitorija danas kako biste pripremili svoj modules za XOOPS 4.0 migraciju.

Uzorak repozitorija je obrazac pristupa podacima koji apstrahira operacije baze podataka, pružajući čisto sučelje za pristup podacima. Djeluje kao posrednik između slojeva poslovne logike i mapiranja podataka.

Uzorak repozitorija pruža:

  • Apstrakcija detalja implementacije baze podataka
  • Jednostavno ismijavanje za testiranje jedinica
  • Centralizirana logika pristupa podacima
  • Fleksibilnost promjene baze podataka bez utjecaja na poslovnu logiku
  • Višekratna logika pristupa podacima u cijeloj aplikaciji

Koristite spremišta kada:

  • Prijenos podataka između aplikacijskih slojeva
  • Treba promijeniti implementaciju baze podataka
  • Pisanje koda koji se može testirati s mockovima
  • Apstrahiranje obrazaca pristupa podacima
<?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);
}
}
?>
  • Koristite sučelja za definiranje ugovora o spremištu
  • Svaki repozitorij obrađuje jednu vrstu entiteta
  • Držite poslovnu logiku u uslugama, a ne u spremištima
  • Koristite objekte entiteta za mapiranje podataka
  • Baci odgovarajuće iznimke za nevažeće operacije

Vidi također:


Oznake: #repozitorij-uzorak #pristup podacima #dizajn-uzorci #modul-razvoj