Your SlideShare is downloading. ×
0
Proved PHP Design Patterns for       Data Persistence   and the evolution to Identity-Map
Topics & Cowboys             Active-Record Pattern             Data-Mapper Pattern             Identity-Map & implementati...
Active-Record Pattern                                         + insert()                                         + update(...
Data-Mapper Pattern   + Decouples domain model class from the persistence store.   + For systems with complex domain logic...
Data-Mapper Pattern problem$personMapper = new PersonMapper($pdo);$person1 = $personMapper->find(1); // creates new object...
Identity-Map Pattern                       + Ensures that each object gets                       loaded only once by keepi...
Identity-Map workflow for method find()20.04.2012             Gjero Krsteski     7
Data-Mapper Pattern with Identity-Map$personMapper = new PersonMapper($pdo);$person1 = $personMapper->find(1); // creates ...
Implementation of Identity-Map into find()public function find($id){    // If the ID is in the Identity-Map,    // then re...
Implementation of Identity-Map into insert()public function insert(Person $person){    // Check if the object is not in th...
Implementation of Identity-Map into update()public function update(Person $person){    // Check whether the object is in t...
Implementation of Identity-Map into delete()public function delete(Person $person){    // Check whether the object is in t...
Thank you for your attention!           Gjero Krsteski  Programmer, Consultant, Trainer      Homepage: krsteski.de     E-M...
Upcoming SlideShare
Loading in...5
×

Proved PHP Design Patterns for Data Persistence

7,074

Published on

Proved PHP Design Patterns for Data Persistence, and the evolution to Identity-Map.

1 Comment
2 Likes
Statistics
Notes
No Downloads
Views
Total Views
7,074
On Slideshare
0
From Embeds
0
Number of Embeds
5
Actions
Shares
0
Downloads
28
Comments
1
Likes
2
Embeds 0
No embeds

No notes for slide

Transcript of "Proved PHP Design Patterns for Data Persistence"

  1. 1. Proved PHP Design Patterns for Data Persistence and the evolution to Identity-Map
  2. 2. Topics & Cowboys Active-Record Pattern Data-Mapper Pattern Identity-Map & implementation20.04.2012 Gjero Krsteski 2
  3. 3. Active-Record Pattern + insert() + update() + delete() + Table properties - No separation of concerns. - Difficult testing without a database. ------------------------------- = For systems with simpler domain logic.20.04.2012 Gjero Krsteski 3
  4. 4. Data-Mapper Pattern + Decouples domain model class from the persistence store. + For systems with complex domain logic where the shape of the domain model will diverge from the database model.20.04.2012 Gjero Krsteski 4
  5. 5. Data-Mapper Pattern problem$personMapper = new PersonMapper($pdo);$person1 = $personMapper->find(1); // creates new object$person2 = $personMapper->find(1); // creates new objectecho $person1->getLastName(); // Joeecho $person2->getLastName(); // Joe$person1->setLastName(Bob);echo $person1->getLastName(); // Bobecho $person2->getLastName(); // Joe -> ?!?20.04.2012 Gjero Krsteski 5
  6. 6. Identity-Map Pattern + Ensures that each object gets loaded only once by keeping every loaded object in a map. + Looks up objects using the map when referring to them.20.04.2012 Gjero Krsteski 6
  7. 7. Identity-Map workflow for method find()20.04.2012 Gjero Krsteski 7
  8. 8. Data-Mapper Pattern with Identity-Map$personMapper = new PersonMapper($pdo);$person1 = $personMapper->find(1); // creates new object$person2 = $personMapper->find(1); // returns same objectecho $person1->getLastName(); // Joeecho $person2->getLastName(); // Joe$person1->setLastName(Bob);echo $person1->getLastName(); // Bobecho $person2->getLastName(); // Bob -> yes, much better20.04.2012 Gjero Krsteski 8
  9. 9. Implementation of Identity-Map into find()public function find($id){ // If the ID is in the Identity-Map, // then return the object from the Identity-Map. // If not, then trie to fetch the object from the database. // If not found in the database, // than throw an exception -> no object with id=x exists! // If found in the database, then register the object in to the Identity-Map. // Return the object.}20.04.2012 Gjero Krsteski 9
  10. 10. Implementation of Identity-Map into insert()public function insert(Person $person){ // Check if the object is not in the Identity-Map, // otherwise throw an exception -> object has an id, cannot insert! // Store the object in the database. // Then register the object in the Identity-Map. // Return the new object.}20.04.2012 Gjero Krsteski 10
  11. 11. Implementation of Identity-Map into update()public function update(Person $person){ // Check whether the object is in the Identity-Map, // if not, then throw an exception -> object has no id, cannot update! // Otherwise, update the object in the database. // Return true.}20.04.2012 Gjero Krsteski 11
  12. 12. Implementation of Identity-Map into delete()public function delete(Person $person){ // Check whether the object is in the Identity-Map, // if not, then throw an exception -> object has no id, cannot delete! // Otherwise, delete the object in the database. // Return true.}20.04.2012 Gjero Krsteski 12
  13. 13. Thank you for your attention! Gjero Krsteski Programmer, Consultant, Trainer Homepage: krsteski.de E-Mail: gjero@krsteski.de
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×