Srovnání – NDB, Doctrine, Nextras ORM, NotORM

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Marek Bartoš
Nette Blogger | 1171
+
+1
-

Srovnání, co jsem našel jsou už pár let stará, může někdo prosím poskytnout aktuální?

Která knihovna je nejrychlejší? Nad malými i velkými daty

Je něco, co v těch knihovnách chybí?

Poskytují něco navíc? (např. doctrine2 migrace)

Jan Tvrdík
Nette guru | 2595
+
0
-

Která knihovna je nejrychlejší? Nad malými i velkými daty

Pokud ti jde o rychlost, tak doporučuji assembly language. Je nejrychlejší nad malými i velkými daty. Všechny uvedené knihovny jsou řádově pomalejší.


Spíš napiš, co od toho čekáš, jaké máš zkušenosti, na jak velké aplikace to chceš použít, jestli plánuješ psát testy apod.

Marek Bartoš
Nette Blogger | 1171
+
0
-

Budu potřebovat pokrýt hodně aplikací, takže nic nízkoúrovňového vzhledem k časovým možnostem. Jelikož jednotlivé moduly budou používat různí klienti, tak se můžou záznamy pohybovat ve stovkách, ale i statisících, takže je super něco optimalizovaného pro obsáhlá data, ale nějak extrémně nezpomalující ty menší.
Jestli se používá orm nebo relační přístup mi je jedno, ale možnost kombinace by asi též nebyla špatná.
Podpora mi stačí u MySql a testy samozřejmost.
Abych upřesnil tu rychlost, tak pár procent rozdíl nehraje roli, spíš mě zajímají propastné rozdíly. Též propastné rozdíly v memory managementu a v případě orm v počtu generovaných dotazů.

Svaťa Šimara
Člen | 98
+
-9
-

Pracuješ v aplikaci s objekty? Opravdovými objekty? Jako fakt? Pokud jo, tak Doctrine.

Ale co píšeš, tak se staráš spíše o data a jejich vztahy. V tomto případě bych použil čisté PDO a psal vlastní dotazy. NDB (table) a NotORM Tě budou jenom omezovat svou vyjadřovací schopností.

Nextras ORM – zajímavý one man show projekt s vlastní fylozofií. Pro studijní účely rozhodně vhodný.

Marek Bartoš
Nette Blogger | 1171
+
0
-

Pro mě je i titulek stránky komponenta, takže ne, že by mi doktrína nevyhovovala, ale bude ze všech nejpomalejší.

Čisté PDO má spoustu nedostatků a těžko se odhalují.

Marek Bartoš
Nette Blogger | 1171
+
0
-

@hrach Jak to vidíš ty, jakožto vývojář nextras orm?

hrach
Člen | 1834
+
+2
-

Napiš si vlastní drobnou aplikaci pomocí daných ORM/DBALu. Vezme ti to dva dny, ale budeš mít zásadně lepší představu. Něco typu https://github.com/…ras/orm-demo. + Zkus nějaký custom SQL, jak se v daných ORM píší.

Já samozřejmě vím, proč to Nextras ORM dělám, takže k tomu těžko můžu mít objektivní pohled, ale zásadně se vymezuji, že orm má nějakou „fylozofii“ ;-) ;-)

Editoval hrach (16. 2. 2017 8:35)

Marek Bartoš
Nette Blogger | 1171
+
0
-

@Minetro Našel jsem tvůj benchmark
Bohužel už je nedostupný. Máš ty statistiky někde ještě prosím?

hrach
Člen | 1834
+
+1
-

@Mabar Ty benchmarky nejsou moc vypovidaji, dulezite je, jak bezny usecase generuje SQL; dale jestli umi optimized loading (aka konstantni pocet dotazu pri zanorenych cyklech) automaticky, nebo to musis rucne napsat , etc.

Marek Bartoš
Nette Blogger | 1171
+
0
-

Díky za navedení. Rozhoduju se mezi NDB a nextras/orm. Obojí vypadá moc dobře. U NDB se jen obávám obtížného definování vztahů přes více tabulek

hrach
Člen | 1834
+
0
-

A to už sis zkusil napsat napsat nějakou app v Doctrine? ;)

Marek Bartoš
Nette Blogger | 1171
+
0
-

Doctrine je příšerně ukecané. Zkoušel jsem před pár měsíci. Možná chybně, generovala mi pár zbytečných dotazů

Svaťa Šimara
Člen | 98
+
0
-

Pokud programuji objektově – modeluji, rozděluji zodpovědnosti, a následně implementuji, je velice vhodné mít třídy pokud možno nezávislé na infrastruktuře. Toto Doctrine s určitými ústupky umožňuje. Tím, že při použití Nextras\Orm musí každá entita implementovat IEntity , má okamžitě, wow, 20 zodpovědností. Mají tyto zodpovědnosti na mojí doménové vrstvě smysl? No, pro mě ne.

Hodně lidí začíná ze špatného konce – tady mám nástroje, a podle toho, co mi umožní, budu programovat. Pojďme na to z druhé strany. Co potřebuji? Potřebuji objekty? Jako opravdu? Anebo je jsou mi objekty pendrek a potřebuji efektivní čtení? Anebo potřebuji mít aplikaci rychle nabouchanou?

ORM řeší probém – potřebuji pracovat s objekty a potřebuji je ukládat do relační databáze. Pokud jeden z těchto problémů nemám, ORM nepoužiju.

Editoval Svaťa Šimara (16. 2. 2017 13:27)

Marek Bartoš
Nette Blogger | 1171
+
0
-

V případě použití orm, konkrétně zkouším doctrine, teď trochu narážím. Aplikaci mám modulární, a tak v ní mám například tabulku users, která se po instalaci modulu rozšiřuje o další sloupce. Lze nějakým způsobem entity rozšiřovat nebo budu muset používat v každém modulu vlastní tabulku users a odkazovat?

Svaťa Šimara
Člen | 98
+
-3
-

@Mabar Jak to prosím funguje objektově? Mám základní třídu Users, jakým způsobem tuto třídu rozšiřuješ dalším modulem?

Marek Bartoš
Nette Blogger | 1171
+
0
-

To je právě to. Doteď jsem psal SQL, takže jsem třídu vůbec rozšiřovat nemusel. Každý modul si tahal jen své sloupce a základní info z tabulky

Svaťa Šimara
Člen | 98
+
-5
-

Píšeš tady o tabulkách a sloupcích, nikoliv o zodpovědnostech a chování.

Zeptám se ještě jednou – opravdu používáš a potřebuješ používat objekty?
Pokud ne, ORM je nesmyslný nástroj.

Marek Bartoš
Nette Blogger | 1171
+
0
-

Inu, asi se bez toho obejdu a zkusím normalizaci a manyToMany vazby (jinak bych potřeboval vazbu ze základní tabulky)

Co by mě zajímalo je – dají se migrace spustit i v runtimu aplikace? Dělám něco jako wordpress a předpokládám použití i na běžném hostingu, takže použití CLI je zapovězeno

Jan Tvrdík
Nette guru | 2595
+
+7
-

Co by mě zajímalo je – dají se migrace spustit i v runtimu aplikace?

Nextras Migrace spustíš prakticky kdekoliv.

opravdu používáš a potřebuješ používat objekty?

Tu otázku nechápu. Jak souvisí to, jestli teď používá objekty s tím, jestli je může používat v budoucnosti? To jako lidi, co dřív objekty nepoužívali, s nimi nemůžou začít? Stejně tak prakticky nikdo nepotřebuje používat objekty, ale to neznamená, že by z využití objektů netěžili. A za třetí mluvíš jako někdo, kdo se domnívá, že objekty jsou dobré akorát na objektové programování, přitom objektové programování je jednom jedno z mnoha dobrých užití.

Svaťa Šimara
Člen | 98
+
-4
-

@JanTvrdík Děkuji za reakci, pokusím se na všechny body odpovědět a rozvířit debatu

Jak souvisí to, jestli teď používá objekty s tím, jestli je může používat v budoucnosti?

V žádném případě jsem netvrdil, že je v budoucnu nebude používat. Tvrdím, že pokud nepotřebuje objekty, ať je nepoužívá a nebude potřebovat ani ORM.

To jako lidi, co dřív objekty nepoužívali, s nimi nemůžou začít?

Zřejmě dochází k nedorozumění, můžeš mi prosím ukázat, kde přesně tvrdím, že s objekty nemohou lidé začít?

Stejně tak prakticky nikdo nepotřebuje používat objekty, ale to neznamená, že by z využití objektů netěžili.

Docela odvážné tvrzení, že prakticky nikdo nepotřebuje používat objekty. Z jakých zkušeností a zdrojů čerpáš?

A za třetí mluvíš jako někdo, kdo se domnívá, že objekty jsou dobré akorát na objektové programování, přitom objektové programování je jednom jedno z mnoha dobrých užití.

Ano, toto jsi trefil. Mám za to, že objekty jsou dobré akorát na OOP. Pokud nemodeluji objektově, nepřemýšlím objektově, nevyužívám zapouzdření chováním, pak mi objekty jenom překáží. Pokud přemýšlím v tabulkách a relacích (a přemýšlet takto je naprosto v pořádku), pak využiju struktury a funkce, které daleko více odpovídají mojemu stylu myšlení a modelování.
Dobře, teď jsi mě dostal, k čemu jsou prosím taky objekty dobré (než jen k OOP)?

Jan Tvrdík
Nette guru | 2595
+
+2
-

Tvrdím, že pokud nepotřebuje objekty, ať je nepoužívá

No a to je právě to, na čem se neshodneme. Já taky nepotřebuji objekty, ale psát bez objektů pro mě znamená víc práce, většinou horší testovatelnost apod. Co to vůbec znamená, potřebovat objekty? Přijde, že ho prostě zcela zbytečně odrazuješ od toho, aby si s ORM zkusil nějaký projekt napsat.

Dobře, teď jsi mě dostal, k čemu jsou prosím taky objekty dobré (než jen k OOP)?

Třeba k funkcionálnímu programování. Nebo k tomu, že si tak snadno můžeš předávat balík užitečných funkcí nebo hodnot. Nebo jako alternativa k asociativnímu poli, kterou jde lépe staticky analyzovat, protože má jasnou strukturu. Nebo jako nástroj pro snížení počtu parametrů funkce (protože část parametrů přesuneš do konstruktoru a nemusíš je uvádět při každém volání).

Šaman
Člen | 2635
+
0
-

Mabar napsal(a):

V případě použití orm, konkrétně zkouším doctrine, teď trochu narážím. Aplikaci mám modulární, a tak v ní mám například tabulku users, která se po instalaci modulu rozšiřuje o další sloupce. Lze nějakým způsobem entity rozšiřovat nebo budu muset používat v každém modulu vlastní tabulku users a odkazovat?

Lze samozřejmě dědit a dokonce ty rozšiřující sloupce mohou být v samostatné tabulce a poděděná třída FooUser se načte částečně z tabulky user a částečně z foo_user.

S Doctrine zkušenosti nemám, ale už jsem rozhodnut ji zkusit. Dlouhodobě používám LeanMapper – ten je na základní práci fajn, ale čím dál častěji narážím na to, že entita má vazbu na databázi a není to standalone objekt. Vím jen o dvou ORM, které tohle nemají – Doctrine a ORM od Petra Procházky, který ovšem nebyl nikdy pořádně zdokumentovaný a byl víceméně interní. (Už jsem ho zase delší dobu neviděl, takže toto se mohlo změnit.)

Editoval Šaman (17. 2. 2017 2:02)

Svaťa Šimara
Člen | 98
+
-3
-

@JanTvrdík Super reakce, možná jsi přehlédl pár otázek, můžeš prosím odpovědět i na ně? Projistotu je sem zopakuji.

To jako lidi, co dřív objekty nepoužívali, s nimi nemůžou začít?

Zřejmě dochází k nedorozumění, můžeš mi prosím ukázat, kde přesně tvrdím, že s objekty nemohou lidé začít?

Stejně tak prakticky nikdo nepotřebuje používat objekty, ale to neznamená, že by z využití objektů netěžili.

Docela odvážné tvrzení, že prakticky nikdo nepotřebuje používat objekty. Z jakých zkušeností a zdrojů čerpáš?

Co to vůbec znamená, potřebovat objekty? Přijde, že ho prostě zcela zbytečně odrazuješ od toho, aby si s ORM zkusil nějaký projekt napsat.

Už si připadám jako Goebbels. Nejdříve musím mít problém – přemýšlím o chování, modeluji objektově. Tento model potřebuji implementovat, pak použiji objekty. Pokud nepřemýšlím objektově, nemodeluji objektově, nepoužiji objekty.
Odrazuji ho od používání objektů, pokud nepřemýšlí objektově. V takovém případě jsou objekty nesmyslné.

Dobře, teď jsi mě dostal, k čemu jsou prosím taky objekty dobré (než jen k OOP)?

Třeba k funkcionálnímu programování.

Není vhodnější použít funkcionální jazyk než objektový?

Nebo k tomu, že si tak snadno můžeš předávat balík užitečných funkcí nebo hodnot.

K tomu stačí pole, nebo struktura v jiných jazycích.

Nebo jako alternativa k asociativnímu poli, kterou jde lépe staticky analyzovat, protože má jasnou strukturu. Nebo jako nástroj pro snížení počtu parametrů funkce (protože část parametrů přesuneš do konstruktoru a nemusíš je uvádět při každém volání).

Pokud už jsem nucen použít PHP, tak souhlas.

Svaťa Šimara
Člen | 98
+
-3
-

@Šaman

Dlouhodobě používám LeanMapper – ten je na základní práci fajn, ale čím dál častěji narážím na to, že entita má vazbu na databázi a není to standalone objekt.

LeanMapper jsem si vyzkoušel. A tím bych tak zkončil. Závislost doménových tříd na infrastruktuře (LeanMapperu) pro mě byl zásadní problém. Umíš modelové třídy testovat? Prča, co? A co jednotkově? A co 2 třídy v relaci bez spuštění databáze? ;-) Další problém je v neuzavřenosti objektů a v tom, že člověk musí přemýšlet relačně.

S Doctrine zkušenosti nemám, ale už jsem rozhodnut ji zkusit.

Zníš jako moudrý muž. Ale je důležité si ujasnit proč ji chceš zkusit?
Pro mě to byl strašný mind-switch – z relačního do objektového. Ale jakmile si člověk napíše use-casy, namaluje si zodpovědnosti a tuto malůvku potom implementuje… Tadá! Objekty jsou na světě! To se to potom testuje :-) A pak se člověk zamyslí – a potřebuju vůbec objekty persistovat do relační databáze? Ano? Doctrine a relační databáze! Ne? Hm… co třeba objektová databáze? (a asi Doctrine, protože je to fakt cool nástroj)

hrach
Člen | 1834
+
+4
-

Pro mě to byl strašný mind-switch – z relačního do objektového.

Tvůj život musí být strašné utrpení, switchovat z php do mysql, pak composer v cli, tu git, tu javascript, tu html, tu css, (tu kabel). Vytváříš tu představy o nějakých zásadních problémech, kterém jsem nikdy osobně neměl, a myslím, že běžný programátor taky nemá.

fizzy
Backer | 49
+
+1
-

Nespekuluj a pouzi rovno doctrine, je to odladena kniznica a pouzivaju ju tisice projektov. V pohode s nou vyriesis modularitu, vztahy medzi entitami si mozes definovat interfacami, vyuzivat dedicnost atd.. :)

Mozno trochu casu trva kym si zvykne clovek pracovat s nou ale potom na nu neda dopustit :) Z vlastnej skusenosti mozem potvrdit ze z dlhodobejsieho hladiska sa lahsie udrzuje objektovy model ako stovky roznych arrayov s datami ktore vypluje NDB :)

Svaťa Šimara
Člen | 98
+
-6
-

@hrach Děkuji za reakci, inu pojďme být osobní

Podcenil jsi mě, z vyjmenovaných technologií využívám na denní bázi jenom php a git. A stačí, nic víc nechci a je to tak podle mě dobře. Mám za to, že je lepší se jedné činnosti věnovat pořádně, než dělat od každého trochu.

Možná jsi přesně našel příčinu:

Vytváříš tu představy o nějakých zásadních problémech, kterém jsem nikdy osobně neměl, a myslím, že běžný programátor taky nemá.

Pak kód, který produkuje běžný PHPčkař nemá vypadat tak, jak vypadá. Bez návrhu, spatlané zodpovědnosti, s do očí bijícím nepochopením OOP.

Marek Bartoš
Nette Blogger | 1171
+
0
-

@SvaťaŠimara Takže. Doporučovat funkcionálního programování na jakýkoli strukturální systém v případě, že člověk nepoužívá objekty je absolutní blbost. Funkcionální programování staví na tom, že stav není roztříštěn do mnoha částí aplikace, ale předává se celý mezi funkcemi, které ho nějak přepracovávají.

Když se člověk podívá na to, jaké příspěvky píšeš, tak očividně s radostí shazuješ všechny projekty, co nejsou doctrine.

Objekty. I když mám i pro titulek stránky komponentu, tak to neznamená, že potřebuji ORM. Tohle tvrzení je absolutní blbost. ORM (object-relation mapping) mě jen odstíní od přemapovávání mezi relační databází a objektovým systémem. Jen to přesune problém na jinou rovinu. Tu relační databázi tam máš vždycky, jelikož je objektová databáze v praxi na většinu use cases nepoužitelná.

A když si tedy přeješ být osobní. To, že si vystačíš s php a gitem je tvá věc. Ale většina z nás má klienty, které to css a javascript zajímá. Protože bez toho je pro ně jakákoli funkčnost k ničemu. A ať pracuješ v týmu nebo samostatně, tak to musíš znát. Sám neuděláš nic a v týmu se nikdy nedostaneš k optimu.

Pak jsou tady samozřejmě i ti klienti, které zajímá bezpečnost. Takže to, že nepoužíváš composer má de facto jenom dva možné následky. Buď neaktualizuješ a aplikaci máš děravou jak řešeto. A nebo aktualizuješ prehistorickým přetahováním souborům a přiděláváš si kvanta práce, kvůli troše času, co jsi neobětoval naučení se s daným systémem.

Svaťa Šimara
Člen | 98
+
-1
-

@Mabar Děkuji za podnětnou reakci

Doporučovat funkcionálního programování na jakýkoli strukturální systém v případě, že člověk nepoužívá objekty je absolutní blbost.

Uznávám chybu. Ve funkcionálním programování se nevyznám, proto ho nemám co doporučovat. Zkusím se vyjádřit vhodněji – Zamyslete se prosím, jakým způsobem modelujete, pokud to není objektový model, nepoužívejte OOP, ale něco jiného. Co? Třeba php funkce a pole, ale určitě najdete i vhodnější nástroje. :-)

Když se člověk podívá na to, jaké příspěvky píšeš, tak očividně s radostí shazuješ všechny projekty, co nejsou doctrine.

V úvodním příspěvku jsem se vyjadřoval kladně k PDO. Potřebuji pokládat dotazy, které mi vrací pole? Použiji PDO.
Kritika LeanMapperu a Nextras\ORM je založena na tom, že doménové objekty musí splňovat dost drsné rozhraní, které nesouvisí s doménovou logikou.

Objekty. I když mám i pro titulek stránky komponentu, tak to neznamená, že potřebuji ORM. Tohle tvrzení je absolutní blbost. ORM (object-relation mapping) mě jen odstíní od přemapovávání mezi relační databází a objektovým systémem.

Co si prosím představuješ pod pojmem komponenta? Já mám za komponentu něco, co jde vykreslit. Nikoliv doménový objekt, který obsahuje logiku. Tady dochází zřejmě k nedorozumění v názvosloví.

Tu relační databázi tam máš vždycky, jelikož je objektová databáze v praxi na většinu use cases nepoužitelná.

Good point. Ne. Toto není pravda. Pro některé operace mám připravenou čtecí dokumentovou databázi. Tato databáze obsahuje denormalizovaná data přesně tak, jak je potřebuji pro čtení. Žádné relace, ale krásně připravené dokumenty.
Časem se mi ukazuje, že bych chtěl mít pro celý web čtecí model připravený přesně tak, jak jej bude aplikace zobrazovat. Ta rychlost, ta přehlednost, hm…

Ale většina z nás má klienty, které to css a javascript zajímá. A ať pracuješ v týmu nebo samostatně, tak to musíš znát. Sám neuděláš nic a v týmu se nikdy nedostaneš k optimu.

Chápu že toto je realita full stack programátorů. Ano, pracuji v týmu a CSS a JS vůbec neřeším. Ve velké části aplikace neřeším ani HTML, protože jedeme RESTkou. Ale ano, někde musím připravit šablony – tam vypíšu proměnné oddělené <br> a kodér se stará o zbytek. Takže ani HTML vlastně neznám.

Takže to, že nepoužíváš composer…

Budu citovat sám sebe „využívám na denní bázi jenom php a git“

Napsal jsem to takto schválně, protože composer používám jednou za… měsíc, dva… cca. A v době kdy přidávám knihovny, aktualizuji je a pročítám changelogy, tak neřeším php ani git.

Šaman
Člen | 2635
+
0
-

Všechno je o kompromisech. Kdyby existovalo ultimátní řešení pro persistenci objektů a jejich vyhledávání, nebylo by o čem se dohadovat. Neexistovaly by hybridní databáze, kupa pravých i ošizených ORMů, ani plamenné diskuze který je lepší.

Ani ta Doctrine tě neostíní od relační databáze dokonale. Jakmile začne být nutné optimalizovat počet dotazů, nebo objem přenesených dat, tak je potřeba hodně přesně vědět, jak ORM dotazy skládá a případně kde mu do toho mohu kecat. Třeba pokud nejjednodušší způsob získání určitých dat je pomocí UNIONu. Jindy je třeba potřeba rozbít objekt na dva, ačkoliv to z hlediska doménové logiky nedává smysl (třeba autora a jeho životopis – pokud si načtu dvacet autorů (objektů) abych je někam vypsal, tak nechci načítat také dvacet životopisů (což mohou být poměrně rozsáhlá data), takže to rozbiju na dva objekty s vazbou 1:1).

A pokud použiješ objektovou databázi, tak jistě víš, že bude opravdu oříšek efektivně získat všechny anglické autory, kteří vydali alespoň dvě knihy během první světové války, nebo jejichž knihy mají nadprůměrné hodnocení.

Editoval Šaman (17. 2. 2017 20:21)

Svaťa Šimara
Člen | 98
+
0
-

@Šaman Díky za odpověď

Ani ta Doctrine tě neostíní od relační databáze dokonale.

Tady si zřejmě nerozumíme. Celou dobu tvrdím, že musím mít objektový návrh a musím jej chtít persistovat do relační databáze. Pak teprve použiju ORM. Musím mít důvod persistovat objekty do relační databáze. Proč? Protože v relační databázi se skvěle vyhledává, spojuje nesouvisející. Rozhodně netvrdím, že se chci odstínit od relační databáze. Nechci se od ní odstínit, chci pořád využívat její výhody.

Jindy je třeba potřeba rozbít objekt na dva, ačkoliv to z hlediska doménové logiky nedává smysl…

I čtení je doménová logika, takže pokud potřebuji číst zvlášť jenom podčást objektu, mám špatně už objektový návrh. A to i bez optimalizací kvůli datům.

A pokud použiješ objektovou databázi, tak jistě víš, že bude opravdu oříšek efektivně získat všechny anglické autory, kteří vydali alespoň dvě knihy během první světové války, nebo jejichž knihy mají nadprůměrné hodnocení.

Souhlas, ale co jsem chtěl v sekci o objektové databázi předat je myšlenka čtecího modelu. Ve čtecím modelu mám data přesně tak, jak je chci zobrazit. Takže pokud budu mít na stránce boxíx s přesně těmato informacema, proč je nemít ve čtecím modelu předpočítaná? A tento čtecí model aktualizovat při stanovených událostech.

Ale chápu, kam míříš, co tady popisuješ, je typický use-case pro relační databázi ;-)

Šaman
Člen | 2635
+
0
-

Ok. Vycházím z toho, že:

  • mám plnohodnotné objekty (entity v E-R diagramu)
  • a potřebuji je persistovat
  • a následně načítat, často podle složitějších podmínek.

Uznávám, že poslední dobou se peru s tím, že jednoduché ORMy (ty, které mají přímou vazbu entity na relační databázi) nestačí třeba na složité gridy. Pro gridy jsem si musel začal psát vlastní, často složitá datasource v čistém SQL.
Potřebuji zjistit, jestli Doctrine mi s tímto pomůže a pokud ano, za jakou cenu (třeba pokud chci v tabulce knih fulltextově vyhledávat podle jména autorů, nebo něčeho ještě vzdáleněji napojené). Mám to v todolistu. :)

Editoval Šaman (20. 2. 2017 17:16)

Svaťa Šimara
Člen | 98
+
0
-

mám plnohodnotné objekty (entity v E-R diagramu)

Toto slovní spojení nechápu, můžeš ho prosím rozvést?
Protože objekty jsou instance tříd. Nemají spojitost s entitami v E-R diagramu.

Asi používám Doctrine nějak jinak, než si představuješ Ty. SQLka (resp. DQL pomocí QueryBuilder) píšu ručně na veškeré čtení. Takže s trochou snahy se dá udělat fulltext vyhledávání – bude potřeba vytvořit buď Native Query nebo přidat syntaxi do DQL. Taky se pro časté čtení nehodí hydratovat entity.

Doctrine pomáhá prostě v zápisu:

1. Vytáhnu si pomocí Doctriny z DB entity
2– Provedu use case
3. Persistuju entity

Ale hlavní benefit Doctrine tkví v tom, že mám objekty bez závislosti na infrastruktuře (skoro, kolekce si hydratuje Collection). Takže jsem schopný doménovou logiku vyvíjet bez databáze. Testovat. A tak :-)

David Klouček
Člen | 57
+
0
-

Napadlo mě napsat takovej mapper nad Dibi. Nepracovalo by se s nim jako s normálnim ORM, řešil by jen 2 věci – namapování na entity, abych nepracoval v aplikaci jen s „nějakym polem“ a N+1 problém. Entity by byly teda jen jednoduchý třídy se sloupcema a asociacema v podobě atributů. Fungovalo by to tak, že by se po joinu analyzovaly vybíraný data pomocí mysqli::fetch_fields() (nebo PDO alternativy) a podle názvů sloupců a tabulek by se data roztřídily do entit. Myslíte, že je to hloupost a nebyl by v tom zádrhel?

Editoval David Klouček (21. 2. 2017 8:02)

filsedla
Člen | 101
+
+1
-

@DavidKlouček Nemyslím, že to je blbost. Něco podobného jsem udělal.

janpecha
Backer | 75
+
0
-

@DavidKlouček no nevím, trochu mi to jako nesmysl přijde – budeš tvořit, ladit a vylepšovat něco, co už někdo v nějaké podobě vytvořil, vyladil a dostatečně vylepšil. Spíš bych se koukl, jaké knihovny existují a jestli by nějaká nevyhovovala tvým potřebám.

A když budu konkrétní – při čtení tvého příspěvku mi naskočil Lean Mapper – je to tenký mapper nad Dibi, entity v něm pohodlně namapuješ a N+1 problém taky řeší. Případně pokud nepožaduješ Dibi, tak třeba nad Nette Database existuje těch mapperů a pseudo-ORM celá řada.

Svaťa Šimara
Člen | 98
+
-8
-

@janpecha Přemýšlíš špatně.

Správný postup je: Nepochopím problém, nepochopím existující nástroje, napíšu si vlastní!

David Klouček
Člen | 57
+
0
-

@janpecha Zrovna LeanMapper se mi líbí, ale místo nějakýho pseudo-ORM rovnou použiju Doctrine 2. Nebo použiju DBAL. Jen mě napadlo ho trošičku obohatit abych nedostával tupý array nebo Row, nechci s nim pracovat jako s ORM.

@filsedla Přesně něco takovýho jsem chtěl udělat, ale pro Dibi.

Editoval David Klouček (21. 2. 2017 17:33)