Oznámení
DibiTable a fetch
před 11 lety
- dmajda
- Člen | 22
Ve třídě DibiResult
vidím hezké metody pro vytažení
výsledků: fetch
, fetchAll
, fetchAssoc
,
fetchPairs
, fetchSingle
.
Ve třídě DibiFluent
vidím ty samé hezké metody.
Ve třídě DibiTable
vidím ale metodu fetch
použitou k něčemu trochu jinému (bere také jiné parametry než ostatní
metody fetch
) a další fetchovací metody chybí. Na druhou stranu
lze přes __call
volat fetch[All]ByKdesiCosi
. Jako
uživateli mi to celé přijde dost nekonzistentní a při pronikání do dibi
mě to dost mátlo, zvlášť když má DibiTable
ještě metody
find
a findAll
sloužící taky k pohodlnému
selectování.
Možná to má nějakou logiku, kterou nevidím, ale spíš mi přijde, že by to tady chtělo rozhraní trochu učesat.
před 11 lety
- David Grudl
- Nette Core | 6806
Pokusím se to vysvětlit. DibiTable je experiment, podobně jako DibiFluent, což vlastně vzniklo jako programátorská rozcvička. Zaroveň to prověřuje kvality jádra dibi. V reálných aplikacích jsem ani jedno zatím nepoužil, naopak se mi to výborně hodí do tutoriálů (třeba v Nette), protože je to srozumitelné.
S odstupem času bych řekl, že DibiFluent uzrálo a klidně bych jej mohl začít používat místo klasických SQL příkazů. Naopak DibiTable vidím jako mrtvou věc. API se mi nelíbí, dřív než vykrystalizovalo to začali lidé používat a teď je těžké to nějak česat. Navíc bych to chtěl udělat způsobem, který je v PHP 5.2 téměř neřešitelný a půjde rozumně implementovat až v PHP 5.3. Takže to spíš vidím na druhý pokus třeba pod názvem DibiRecord.
Ale neděste se, prostě jen DibiTable nerozumím, protože je nepoužívám :-) Pokud bude vůle API učesat i za cenu nekompatibility (dyť jsem varoval, že je to experimental :-) ), rád to udělám. Ale chce si to dát tu práci, pohrát si s tím v reálných aplikacích a výsledky shrnout do nějakého koncepčního návrhu.
Výhoda PHP 5.3 je v tom, že lze dotazy nad tabulkou volat staticky
Article::find()
namísto
$article = new Article; $article->find()
. Dále lze používat
i magické statické metody Article::fetchByKdesiCosi()
.
před 11 lety
- phx
- Člen | 652
Ohledne budoucich implementaci spise zachoval nazev DibiTable a soucasnou implementaci nazval DibiTableOld. Kdo to nebude chtit pouzivat si to proste prepise. Nebo prehraje 2 soubory pres sebe.
Osobne me DibiTable take moc nezaujalo. Sice tam jsou dost pekne znazorneny nejake veci ktere jsem vyuzil jako inspiraci pro svuj DBReadServices a DBWriteServices. Na DibiTable se mi nelibi to, ze to castecne micha dohromady Model a Service. Osobne preferuji 100% nezavislost na vzhledu tabulek v DB a s DB komunikuji prostrednictvim Sluzeb a Modelu.
I kdyz ted kdyz koukam do zdrojaku tam uz nevim kde a kdy jsem to michani videl. Lepsi pojmenovani by bylo asi inteligentnejsi rozhrani pro konkretni tabulu v DB.
Otazka: lze nejak nastavit aby vracelo muj konkretni objekt napr muj DBModel a ne DibiRow? Idealne pred dotazem anstavit ze vysledkem ma byt nejaky objekt (napr pro tabulku Auta to bude objekt Auta potomek DBModel)
před 11 lety
- dmajda
- Člen | 22
David Grudl napsal(a):
Naopak DibiTable vidím jako mrtvou věc. API se mi nelíbí, dřív než vykrystalizovalo to začali lidé používat a teď je těžké to nějak česat.
:-(
Navíc bych to chtěl udělat způsobem, který je v PHP 5.2 téměř neřešitelný a půjde rozumně implementovat až v PHP 5.3.
Vím, o čem mluvíš, protože jsem nedávno něco podobného zkoušel implementovat taky a narazil jsem minmálně na absenci late static binding.
Ale neděste se, prostě jen DibiTable nerozumím, protože je nepoužívám :-) Pokud bude vůle API učesat i za cenu nekompatibility (dyť jsem varoval, že je to experimental :-) ), rád to udělám. Ale chce si to dát tu práci, pohrát si s tím v reálných aplikacích a výsledky shrnout do nějakého koncepčního návrhu.
Já DibiTable
reálně používám (byť zatím jen v jedné
poměrně jednoduché aplikačce) a přijde mi to jako celkem užitečná (byť
nedokonalá) zkratka. Do tříd odvozených od DibiTable
si taky
cpu všechny metody pracující s databází, aby se mi SQL neválelo po kódu.
Tj. používám DibiTable
trochu jako model v MVC.
Ad koncepční návrh: Myslím, že jediný takový návrh, který ze mě vypadne, je „okopírovat ActiveRecord z Rails“ :-) Ale je mi jasné, že tohle slyšet nechceš… nehledě na to, že v PHP < 5.3 to prakticky není technicky realizovatelné.
před 11 lety
- David Grudl
- Nette Core | 6806
phx napsal(a):
Otazka: lze nejak nastavit aby vracelo muj konkretni objekt napr muj DBModel a ne DibiRow? Idealne pred dotazem anstavit ze vysledkem ma byt nejaky objekt (napr pro tabulku Auta to bude objekt Auta potomek DBModel)
Už jo, přes $res->setRowClass(‚Auta‘);
před 11 lety
- David Grudl
- Nette Core | 6806
dmajda napsal(a):
Ad koncepční návrh: Myslím, že jediný takový návrh, který ze mě vypadne, je „okopírovat ActiveRecord z Rails“ :-) Ale je mi jasné, že tohle slyšet nechceš… nehledě na to, že v PHP < 5.3 to prakticky není technicky realizovatelné.
Proč ne? Zkus to prosím udělat. Myslím že hodně lidí tady (včetně mě) ActiveRecord zná jen od slyšení. Zkus vytvořit návrh, jaké metody by taková třída měla mít, jak by se měla používat. Samozřejmě v souladu s konvencí jiných tříd v dibi.
před 11 lety
- phx
- Člen | 652
Mozna pro nezasvecene by bodnul nejaky pekny dokument, ktery popisuje co to je a jake to ma ideje. Ano mohu si to vygooglit, ale urcite vite o nejakem kde to je krasne jasne popsane.
před 11 lety
- dmajda
- Člen | 22
David Grudl napsal(a):
dmajda napsal(a):
Ad koncepční návrh: Myslím, že jediný takový návrh, který ze mě vypadne, je „okopírovat ActiveRecord z Rails“ :-) Ale je mi jasné, že tohle slyšet nechceš… nehledě na to, že v PHP < 5.3 to prakticky není technicky realizovatelné.
Proč ne? Zkus to prosím udělat. Myslím že hodně lidí tady (včetně mě) ActiveRecord zná jen od slyšení. Zkus vytvořit návrh, jaké metody by taková třída měla mít, jak by se měla používat. Samozřejmě v souladu s konvencí jiných tříd v dibi.
Myslím, že na tohle nejsem ten pravý, už jen proto, že jsem v životě
z ActiveRecord využil tak 10% jeho možností (zhruba odpovídajících tomu,
co je v DibiTable
). Můžeme o tom víc pokecat ve středu…
před 11 lety
- dmajda
- Člen | 22
phx napsal(a):
Mozna pro nezasvecene by bodnul nejaky pekny dokument, ktery popisuje co to je a jake to ma ideje. Ano mohu si to vygooglit, ale urcite vite o nejakem kde to je krasne jasne popsane.
Pěkný popis lze nalézt asi v každé dobré knížce o Rails. Jinak
můžu poskytnout odkaz na dokumentaci API, ze které se toho myslím dá docela dost
vykoukat. Nejdůležitější je třída ActiveRecord::Base
, která je předkem všech
modelů.
BTW do Zendu něco jako ActiveRecord chtějí dodělat.
před 11 lety
- phx
- Člen | 652
dmajda napsal(a):
Můžeme o tom víc pokecat ve středu…
Co se kde deje ve stredu?
před 11 lety
- dmajda
- Člen | 22
phx napsal(a):
Co se kde deje ve stredu?
Pravidelné setkání příznivců jazyka Ruby a frameworku Ruby on Rails.
před 11 lety
- phx
- Člen | 652
Davide muzes nastinit jakou mas predstavu o nastupci DibiTable? Rad bych nacerpal inspiraci. Navic by asi bylo lepsi diskutovat drive a ne az to lidi zacnou pouzivat;)
před 11 lety
- phx
- Člen | 652
Nepochlubis se?
před 11 lety
- David Grudl
- Nette Core | 6806
Nemůžu. Nemám čím :-)