Mas to napsane v clanku,: Článek je volně přeložen z anglického originálu ORM is an anti-pattern, který napsal Laurie Voss (technický vedoucí awe.sm, dříve např. Yahoo! Widgets) a vydal ho na svém blogu pod licencí CC-BY-NC-SA.
original:
https://seldo.com/posts/orm_is_an_antipatternLaurie Voss: Laurie Voss is npm’s CTO. Laurie has over 15 years of experience building web services at scale, including 4 years at Yahoo. He and I perfected our lunchtime banter on the Yahoo! Apps team. Most recently, Laurie led the technical team at Awe.sm. He brings deep experience with databases, analytics, and mission critical infrastructure services.
Není to názor jednoho člověka, problém s ORM má kde kdo.
https://www.yegor256.com/2014/12/01/orm-offensive-anti-pattern.htmlhttps://www.eversql.com/i-followed-hibernate-orm-to-hell-and-came-back-alive-to-tell-about-it/Ano, dělá to něco automaticky za tebe, pro tebe je to dobrý. Ale ORM to nedělá dobře a ani nemůže, dokud za ním nebude stát dobrá AI, nesloží to kvalitní SQL dotaz. Není to dobré obecně, a už vůbec pro relační databáze.
Naši databázoví experti ORM upřímně nesnáší, mluví o DOS útoku z jeho strany. Čím složitější jsou data, tím je to horší, zátěž vzrůstá exponenciálně, to je špatně. Pro patlala je to dobrý, pro big data nikoliv.
ORM neumí pořádně využívat možnosti databází, neumí je to používat efektivně a nejde jen o výkon. Databáze mají mnoho skvělých specifických featur, nejen pro výkon, ale třeba i datovou bezpečnost, ORM z toho nic nepoužívá a ani nemůže. ORM je obecné a degraduje databázi v primitivní úložiště. Proč potom ale nepoužívat rovnou primitivní úložiště, proč platít za databázi a tu nechat zahlcovat nesmyslnými dotazy, že?
Trefné přirovnání pro ORM je, že používt ORM je jako jezdit do deset km vzdáleného obchodu autem pro každý rohlík zvlášť. Že neumíš používat transakce je hezké, ale ORM je také efektivně používat neumí. Kvalitní SQL dotazy a transakce jsou přitom klíček k efektivitě. Výsledkem ORM jsou aplikace, kde zadáš dotaz a nudíš se, než ti aplikace dodá výsledek. Přitom ta databáze má maximálně několik milionů záznamů a tvůj dotaz je jednoduchý, odezva by měla být v milisekundách a místo toho je v desítkách sekund.
Tam kde se ORM jakž takž hodí, tj na primitivní věci malého rozsahu, tam nepotřebuješ databázi a kde ji potřebuješ, tam se nehodí ORM, protože ji neumí z větší části používat a kde ji používat umí, neumí to z větší části efektivně. Proto je to antipattern.
Není zas tak složité přistupovat k databázi přímo bez prostředníka, naučit se SQL, na jednoduché věci je SQL jednoduché. A komplexnější věci ti navrhne a efektivně udělá db specialista přes vlžené procedury a trigerry. Kde je proti tomu ORM? Kdybys SQL uměl, pomůže ti to i v té Javě a tyto znalosti bys pak skvěle využil i v Pythonu. Místo toho marníš čas tím, že se neefektivně pro každé prostředí zvlášť učíš rozumět antipatternu. ORM je typický podukt bloatware, ale to ti vyhovuje, na tom je postavena tvoje zkušenost, se kterou si pochvaluješ, jak ti IDE generuje samo kód.
BTW naučilo se už Hibernate alespoň používat multiple inserty?