Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Používať alebo nepoužívať ORM   vo webových aplikáciách?        @MarekLichtner
Obsah    ORM, výhody nevýhody    NotORM    Prekvapenie    Ako na db v Nette frameworku
Varovanie!    Moje skúsenosti    Neukazujem neomylné múdrosti sveta
O mne    www.education.sk    Intranetové riešenia CRM    –   ORM - 5 rokov    –   Alternatívy k ORM asi 2 roky
Čo je to ORM?    Object-relational mapping    Hlavná úloha:    –   Synchronizovať objekty v aplikácii a ich        repre...
Prečo ORM    Odtieniť vývojára od DB a SQL    Uľahčiť jednoduché operácie CRUD    Nezávislosť na databázovom systéme  ...
Ako začať pracovať s ORM?class User extends BaseActiveRecord {    protected $id;    /** @Column(type="string") **/    publ...
Základné použitie ORM// ešte treba nejako definovať relácie$user = User::find(10);$user->delete();$user = new User();$user...
Problém č.1: Odtienenie od SQL    Otázka: Existuje vývojár, ktorý nepozná SQL?    Princíp 80/20 nefunguje    –   Platí l...
Problém č.2: Efektivita    ORM tvrdia, že nie sú zamerané na efektivitu,    že efektivita je „good enough“    Vlastnosti...
Ďalšie problémy ORM    Nezávislosť na databázovom systéme    –   Napríklad aj PDO je nezávislé na db    Umožňuje generov...
Je teda ORM antipattern?    Kritéria podľa knihy „AntiPatterns“:    –   Na začiatku sa to javí ako prínosné, ale postupom...
NotORM    Knižnica na práca s datami v DB    Ani riadok nazmar!    –   žiadne modely, relácie, vlastnosti, validátory,  ...
Ako vyzerá NotORM$db = new NotORM($pdo);foreach ($db->user() as $user) {    // User::all()    echo "$user[name]n";}$user =...
Problémy s NotORM    Nepodstatné počiatočné problémy    –   Vyžaduje iné myslenie    –   Pre niekoho možno až príliš mini...
Naspäť k PDO    Na PDO je dobré    –   Abstraktná vrstva – MySQL, SQLite, PostgreSQL,        Oracle, ….    –   Eskejpovan...
Niečo nové?    Postavené na PDO    Mať plnú kontrolu nad generovaným SQL    Fluent interface    Zero configuration (ži...
FluentPDO    @FluentPDO    fluentpdo.com    Spĺňa uvedené podmienky
Ako to používam v Nette    Príklad v nette:    –   https://github/lichtner/fluentpdo-nette-sandbox
Otázky?    Kontakt    –   @MarekLichtner (licht.sk)    –   @FluentPDO (fluentpdo.com)
Upcoming SlideShare
Loading in …5
×

Marek Lichtner - Používať alebo nepoužívať ORM vo webových aplikáciách?

1,156 views

Published on

  • Be the first to comment

  • Be the first to like this

Marek Lichtner - Používať alebo nepoužívať ORM vo webových aplikáciách?

  1. 1. Používať alebo nepoužívať ORM vo webových aplikáciách? @MarekLichtner
  2. 2. Obsah ORM, výhody nevýhody NotORM Prekvapenie Ako na db v Nette frameworku
  3. 3. Varovanie! Moje skúsenosti Neukazujem neomylné múdrosti sveta
  4. 4. O mne www.education.sk Intranetové riešenia CRM – ORM - 5 rokov – Alternatívy k ORM asi 2 roky
  5. 5. Čo je to ORM? Object-relational mapping Hlavná úloha: – Synchronizovať objekty v aplikácii a ich reprezentáciu v relačnej databáze tak, aby bola zachovaná persistencia dát. Niekoľko návrhových vzorov pre ORM – Active Record
  6. 6. Prečo ORM Odtieniť vývojára od DB a SQL Uľahčiť jednoduché operácie CRUD Nezávislosť na databázovom systéme Umožňuje generovanie kódu Efektivita je „good enough“
  7. 7. Ako začať pracovať s ORM?class User extends BaseActiveRecord { protected $id; /** @Column(type="string") **/ public $name; function tableName() { return user; } static function all() { // return … collection ...; } static function find($id) { // return … user model; } function getName() { return $this->name; } function setName($value) { $this->name = $value; }}
  8. 8. Základné použitie ORM// ešte treba nejako definovať relácie$user = User::find(10);$user->delete();$user = new User();$user->name = Janko Hraško;$user->save();$users = User::all();$users = User::all()->filter(...)->order(...)->someSql(..);$users = User::all()->onlyEnabled();
  9. 9. Problém č.1: Odtienenie od SQL Otázka: Existuje vývojár, ktorý nepozná SQL? Princíp 80/20 nefunguje – Platí len na začiatku, blog za 15min – Pokiaľ robíte niečo zložité: ● $users = User::all()->sql(....); Nemusíte poznať SQL? – Musíte a okrem toho ešte aj ORM vrstvu Cieľ – zjednodušiť – Nakoniec som musel obchádzať ORM
  10. 10. Problém č.2: Efektivita ORM tvrdia, že nie sú zamerané na efektivitu, že efektivita je „good enough“ Vlastnosti, stĺpce JOINy, napríklad blog: Články + komentáre. – Koľko akých dotazov vaše ORM položí? – Vie použiť JOIN? foreach (Article::all()->limit(10) as $article) { echo $article->title; foreach ($article->comments as $comment) { echo $comment->title; } }
  11. 11. Ďalšie problémy ORM Nezávislosť na databázovom systéme – Napríklad aj PDO je nezávislé na db Umožňuje generovanie kódu Ukecanosť – Modely, vlastnosti, relácie, gettery, settery – Ak ste platený od počtu riadkov je ORM super ;-)
  12. 12. Je teda ORM antipattern? Kritéria podľa knihy „AntiPatterns“: – Na začiatku sa to javí ako prínosné, ale postupom času sa objavuje stále viac zlých dôsledkov ako dobrých – Existuje alternatívne riešenie
  13. 13. NotORM Knižnica na práca s datami v DB Ani riadok nazmar! – žiadne modely, relácie, vlastnosti, validátory, gettery, settery Ani znak nazmar! – Minimalistické API Veľký dôraz na výkon – Konštantný počet dotazov Výborná podpora JOINov – Využíva bežné konvencie
  14. 14. Ako vyzerá NotORM$db = new NotORM($pdo);foreach ($db->user() as $user) { // User::all() echo "$user[name]n";}$user = $db->user[2]; // User::find(2);foreach ($db->article()->limit(10) as $article) { echo "$article[title]n"; foreach ($article->comment() as $comment) { echo " - $comment[title]n"; }}SELECT * FROM article LIMIT 10;SELECT * FROM comment WHERE article_id IN (1,2,3,4,5,6,7,8,9,10);
  15. 15. Problémy s NotORM Nepodstatné počiatočné problémy – Vyžaduje iné myslenie – Pre niekoho možno až príliš minimalistické API Vážnejšie problémy – Generovanie SQL nemáte pod kontrolou ● Niektoré zložité queries som nedokázal prepísať – Niektoré veci sa nedajú urobiť ● Inner join ● Podmienka v joine Toto sa nedá: SELECT * FROM article INNER JOIN user ON user.id = article.user_id AND …
  16. 16. Naspäť k PDO Na PDO je dobré – Abstraktná vrstva – MySQL, SQLite, PostgreSQL, Oracle, …. – Eskejpovanie, viazanie premenných – Implementované Traversable Čo mi chýbalo na PDO – Viazanie polí, nedá sa urobiť: ● query(id in (?), $array) – Neexistuje fluent interface
  17. 17. Niečo nové? Postavené na PDO Mať plnú kontrolu nad generovaným SQL Fluent interface Zero configuration (žiadne modely, relácie, gettery, ...) Jednoduché API Čo najkratší zápis, inteligentné JOINy, využívajúce konvencie Prichádza svetová premiéra... ;-)
  18. 18. FluentPDO @FluentPDO fluentpdo.com Spĺňa uvedené podmienky
  19. 19. Ako to používam v Nette Príklad v nette: – https://github/lichtner/fluentpdo-nette-sandbox
  20. 20. Otázky? Kontakt – @MarekLichtner (licht.sk) – @FluentPDO (fluentpdo.com)

×