What ORMs have taught me: just learn SQL

https://wozniak.ca/blog/2014/08/03/What-ORMs-have-taught-me-just-learn-SQL/index.html

Parca imi vine mai natural sa scriu un select..., dar au si orm-urile avantajele lor.

Acum am vazut ca articolul este din 2014. Intre timp s-au mai schimbat multe in vreo 5 ani. ORM-urile au devenit mai destepte, au difeite strategii de fetch a datelor (eager, lazy), performanta mai buna, api simplificat cu doar ce este relevant etc

Insa uneori magia este este coplesitoare. Ca nu vezi cum face acele lucruri. Si daca ceva nu merge trebuie sa sati sa cauti, sa inspectezi cu un profiler sa vezi ce query se genereaza, sa il testezi poate.

1 Like

Acum ai citit al 3001 lea articol si il discutam pe al 201 lea forum

1 Like

ORM-ul il consider destul de greoi si complicat. Deseori pot scrie query-ul de mana mult mai rapid decat imi ia sa gasesc hack-ul pentru ORM.

Desigur, la aplicatii simple unde citesti/scrii date din/in cateva tabele e ok. Dar cand ai tabele cu serioase probleme de legatura, de genul tabele parinte-fiu unde trebuie pastrata legatura Parinte.id = Fiu.id (in loc de Fiu.parinte_id), eh, e mai greu cu ORM-uri.

1 Like

Noi folosm Hibernate alaturi de jdbc templates. Pt query-uri banale, ne lasam pe hibernate si ale lui findBy.....

Query-urile mai complexe si care aduc mai multe date le facem cu jdbc. Colegii mei au cinstrui ceva mai type safe peste jdbc. :slight_smile:

De exemplu qury-ul select col1, col2,... from user where id = 123 nu aduce valoare business

SQL este ceva fundamental pt orice programator. Eu nu sunt impotriva orm-urilo. Ceea ce am mai adaugat in plus este si din experienta mea.

Chei primare indentice/refolosite în mai multe table e o practică îndoielnică oricum, lăsând ORM-ul la o parte. Pe de altă cu Doctrine poți gestiona o situație de genul destul de ușor.


În ulitmii ani eu am lucrat foarte mult cu ORM (Doctrine) și deși nu este vreuo unealtă fermecată care m-a scăpat de toate problemele (ba chiar a introdus unele noi la un moment dat), consider că aduce mult mai multe plusuri decat minusuri.
Fiind o implementare Data Mapper pattern, Doctrine m-a scapt în primul rând de probeleme cu validarea datelor și/sau asocierile din formulare (în contextul unei aplicații Symfony).
Tot timpul asta am creat și destul de metode specifice prin cod în care am folosit SQL nativ (pentru interogari complexe) sau pentru a returna valori concrete, rapid, pentru ca nu aveam nevoie de întreg obiectul (sau relațiile lui).

PS: Să zici ca poți folosi un ORM fără să cunoști și inteleg elementele de bază ale serverului de baze date folosit e ca și cum ai zice că poți să folosești un framework fără să întelegi limbajul în care e scris. Nu cred că are vreun sens.

PPS: Chiar dacă ai un ciocan mare (ORM-ul), nu înseamnă ca tot ce în jur sunt cuie. :wink:

1 Like

This :grin:

Daca toti avem scrise query-uri de mana prin aplicatii, ce rost are un ‘ceva’ extra? Doar pentru niste SELECT-uri mai frumoase?

Problema nu e la JOIN-uri sau la validarea datelor. Problema e cand ai de scris query-uri cu CASE, cu prioritizari, ca alegere manuala a indecsilor, cu ON DUPLICATE KEY, etc.

1 Like

Stai linisti, nu te pune nimeni sa il folosesti. Asa cum a zis @redecs

Chiar dacă ai un ciocan mare (ORM-ul), nu înseamnă ca tot ce în jur sunt cuie.

Pai nu e inradacinat in toate framework-urile? Yii, Cake, CodeIgniter, Laravel, etc.?

Păi cine de obligă să folosești un framework? :smiley: Și framework-ul, ca și ORM-ul vine cu limitările lui (și avantaje bineînteles).

Ah, framework-urile te ajută să dezvolți mai rapid. Pai ORM-ul este în general parte integrantă din acest “mai rapid”. De asta toate framework-urile au unul.

Dacă ai interogări complexe, le scrii de mână și gata, dar în general, un proiect va avea câteva interogări cu CASE (sau funcții GIS sau alte chestii specifice) și mult mai multe interogari generice, care pot fi satisfăcute de un ORM.

1 Like

Habar n-am cum este in php, dar in c# si java poti scrie cod sql raw. si nu cred ca mai. treci prin orm.

Insa trebuie atentie la vulnerabilitati de tip sql injection :smiley: (yep, it’s still a thing!)

Mai sunt do lucruri precum Drapper sau jooq care sunt mai lightweight si cu performanta mai buna