- Stefanescu Mihai a postat in Paginare in PHP
- johhny a postat in Paginare in PHP
- Stefanescu Mihai a postat in Cum pot afisa eroarea cand utilizatorul a scris un username gresit sau o parola gresita?
- madalin a postat in Cum pot afisa eroarea cand utilizatorul a scris un username gresit sau o parola gresita?
- Stefanescu Mihai a postat in Featureuri site
Design pattern-ul Data mapper explicat in PHP
Design pattern-ul Data Mapper este un design folosit pentru a separa in 2 niveluri datele si logica de business a aplicatiei. Acest pattern este des folosit in sistemele de tip object relational mapping (ORM).
In acest pattern, datele sunt transferate intre obiecte in aplicatie, tinandu-se pe obiecte separate datele de logica de business (vezi active record, unde un model putea avea atat date cat si logica de business). Facand aceasta separare ne putem pastra obiectele ce se ocupa de date fara logica, iar obiectele de logica doar cu logica, facandu-le mai usor de modificat, intretinut si testat.
Hai sa discutam de un exemplu practic despre cum functioneaza acest pattern.
Prima data trebuie sa definim un obiect ce reprezinta datele stocate in baza de date. Acest obiect va avea proprietati ce corespund campurilor din tabela dorita, dar nu va contine nicio bucata de logica (vezi save/find/update/delete de pe un model din pattern-ul Active Record)
class User { private $id; private $username; private $email; public function __construct($id, $username, $email) { $this->id = $id; $this->username = $username; $this->email = $email; } // Getteri si setteri pentru proprietati }
Acum, avem nevoie de un obiect de tip data mapper ce se va ocupa de logica de access a datelor. Acest obiect va avea metode pentru crearea, selectarea, modificarea si stergerea datelor din baza de date.
class UserMapper { private $pdo; public function __construct($pdo) { $this->pdo = $pdo; } public function find($id) { // codul pentru a efectua un select dupa id } public function save(User $user) { // codul pentru a salva un obiect in baza de date } public function delete(User $user) { // codul pentru a sterge un obiect din baza de date } }
Acum, putem folosi obiectul de tip mapper pentru a interactiona cu baza de date.
$pdo = new PDO('mysql:host=localhost;dbname=invata_programare', 'user', 'password'); $userMapper = new UserMapper($pdo); $user = $userMapper->find(1); $user->username = 'm105'; $userMapper->save($user);
Folosind acest design pattern, data mapper, poti mentine la nivele separate logica de business de datele din baza de date,facand codul mai usor de inteles, intretinut si testat. Pe langa acest aspect, ar trebui sa avem in vedere si ca putem encapsula cod specific pentru ubaza de date astfel facnd mai usor schimbarea de la un sistem de baze de date, daca este nevoie.
Comentarii
Inca nu au fost postate comentarii, fii primul care posteaza un comentariu!