Pět vrstev modelu

16,132 views

Published on

Útěk od Active Record

Published in: Technology
0 Comments
3 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
16,132
On SlideShare
0
From Embeds
0
Number of Embeds
13,344
Actions
Shares
0
Downloads
15
Comments
0
Likes
3
Embeds 0
No embeds

No notes for slide

Pět vrstev modelu

  1. 1. @jantichy @mediocz Jan Tichý Medio Interactive Útěk od Active Record Pět vrstev modelu
  2. 2. Active Record <ul><li>Co tabulka, to jedna třída
  3. 3. Co záznam v tabulce, to jedna instance
  4. 4. Všechny gettery, settery a obslužné metody jsou v jedné třídě </li></ul>$article = new Article(123); $article->setStatus(Article::STATUS_PUBLISHED); $article->setPublished(new DateTime); $article->save();
  5. 5. Vrstvy modelu v Active Record
  6. 6. Problematické body <ul><li>Cachování
  7. 7. Více různých uložišť
  8. 8. Nahrazování jinými třídami
  9. 9. Single responsibility
  10. 10. Testovatelnost
  11. 11. Silná vazba na strukturu databáze
  12. 12. Jeden record je právě jedna tabulka
  13. 13. Rozšiřitelnost, reusability, modularita </li></ul>
  14. 14. Vrstvy modelu
  15. 15. Entita
  16. 16. Entita <ul><li>Přepravka pro data
  17. 17. Gettery, settery
  18. 18. Typové konverze, kontrola validity </li></ul>$article = new Article; $article = ArticleRepository::find(123); $article->setStatus(Article::STATUS_PUBLISHED); $article->setPublished(new DateTime); echo $article->getTitle();
  19. 19. Mapper
  20. 20. Mapper <ul><li>Obsluha konkrétního uložiště
  21. 21. Databáze, memcache, filesystém
  22. 22. Při find() načte data, vytvoří a naplní entitu, vrátí do repository
  23. 23. Při save() dostane od repository entitu a uloží ji do daného uložiště </li></ul>$mapper = new ArticleDbMapper; $article = $mapper->find(123); $mapper->save($article);
  24. 24. Repository
  25. 25. Repository <ul><li>Vrací uživateli instanci entity
  26. 26. Jednotné místo pro obslužné metody
  27. 27. Řídí si ukládání, cachování, práci s mappery
  28. 28. Na pozadí volá jednotlivé mappery </li></ul>$article = ArticleRepository::find(123); ArticleRepository::save($article); ArticleRepository::delete($article); ArticleRepository::move($article, 5);
  29. 29. Repository <ul><li>Můžeme nahradit jednu repository za jinou, aniž bychom zasahovali do entity
  30. 30. Můžeme prohazovat různé mappery
  31. 31. Jedna repository může podmíněně vracet různé typy entit: </li></ul>// vrátí Television (potomek Product) $product = ProductRepository::find(5); // vrátí Notebook (potomek Product) $product = ProductRepository::find(123);
  32. 32. Service
  33. 33. Service <ul><li>Odstiňuje uživatele od sloupců entity
  34. 34. Balí je do ucelené funkčnosti
  35. 35. Omezení funkčnosti pro daného uživatele </li></ul>$post->publish(); <ul><li>Je to jen fasáda nad entitou: </li></ul>$article->setStatus(Article::STATUS_PUBLISHED); $article->setPublished(new DateTime); ArticleRepository::save($article);
  36. 36. Příklad rozvrstvení modelu
  37. 37. @jantichy @mediocz Jan Tichý Medio Interactive Díky za pozornost!

×