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.
Koncept úložiště
Sekce “Koncept úložiště”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
Vzor implementace
Sekce “Vzor implementace”<?php// Define repository interfaceinterface 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 repositoryclass UserRepository implements UserRepositoryInterface{ private $db;
public function __construct($connection) { $this->db = $connection; }
public function find($id) { // Implementation }
public function save($entity) { // Implementation }}?>Použití ve službách
Sekce “Použití ve službách”<?phpclass 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); }}?>Nejlepší postupy
Sekce “Nejlepší postupy”- 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é:
- MVC-Pattern pro integraci ovladače
- Service-Layer pro implementaci služby
- DTO-Pattern pro objekty přenosu dat
- Testování pro testování úložiště
Tagy: #repository-pattern #data-access #design-patterns #module-development