Jak správně na „objekt“ – článek, zboží, komenář (s Nette Database)
- neznamy_uzivatel
- Člen | 115
Zdravím,
zajímalo by mě jak nejlépe pracovat např. se zbožím v shopu, článkem na
blogu, atd.
Já mám např. vše tak jednoduché, že pracuju s tím, co mi vrátí
ndbt.
Prostě $x = table()->get(); a $x reprezentuje můj
článek/produkt/komentář.
V modelech mám pak různé funkce, kterým předávám $x. Tam to „něco
udělá“, např. zjistí z db text názvu kategorie podle $x->category a
vrátím mi ho.
chtěl jsem to změnit na nějaký „lepší“ způsob. Uvažuju o samostatném objektu, který by rovnou obsahoval všechny často používané funkce pro daný „typ objektu“, tzn např. by se tam rovnou naplnil ten název kategorie z jiné tabulky, atd. Nevím, jestli je lepší to takhle nacpat do jedné třídy, nebo raděj předávat do modelů to co vrátí ndbt?
Opticky se mi líbí tento přístup: https://github.com/…seObject.php
Přijde mi to lepší, než jíný zdroják, kde to autor předával třeba 15+
parametry konstruktoru. V tom se nevyznám po týdnu práce na něčem
jiném..
Řekněme, že bych si to podobně udělal, každá položka na výpisu
článků by byla samostatný objekt do kterého bych si tímto způsobem nacpal
co přišlo z ndbt a doplnil o další věci.
Proč je to špatně? :) Je to moc špatně?
tzn. z mého $this->model->clanky->nazevKategorie($x);
by se stalo $x->nazevKategorie();
nebo by v sobě mohl ten objekt rovnou nést komentáře, hodnocení,
atd…
např.
$comments = $this->model->clanky->getComments($x);
by se změnilo na něco jako
$x = new Product(?);
.....
foreach ($x->comments as $comment) …
Zkoušel jsem hledat nějaké články, prošel jsem nějaké zdrojáky na gitu, ale v tomhle nevím jaký přístup správně zvolit a proč. Angličtinu zvládnu na úrovni čtení technické dokumentace k něčemu, co už znám a české zdroje sice krásně rozepíšou jak vytvořit objekt Jabko a Hruška a dát je do jedné \Miska, nicméně tohle mi moc neřeklo :)
dál jsem při tom hlednání narazil na něco jako že by žádná třída neměla řešit moc věcí najednou. Nějak nevím proč by bylo špatné mít vše pro práci s jedním typem dat na jednom místě? (ta varianta třídy product, která by uměla řešit „všechno“ (ve smyslu načtení dat z ostatních zdrojů jako je ten název kategorie, hodnocení), obsahovala by rovnou komentáře, atd. Případně tedy asi ne rovnou obsah komentářů, ale až by byly ty komentáře potřeba, tak by se propvedl dotaz do db)
Tip na český článek zacházející dál, než míchání nesouvisejících jablek a hrušek v jedné misce by pomohl :)
Díky :)
Editoval neznamy_uzivatel (28. 11. 2017 9:07)
- Pavel Kravčík
- Člen | 1196
Zkus si přečíst něco o ORM. V podstatě si na správné cestě, akorát si můžeš ušetřit ten mezistupeň, když si to napíšeš sám a pak zjistíš, že se to jmenuje ORM a někdo už to udělal lépe, než ty. :)
- neznamy_uzivatel
- Člen | 115
Dík za tip, ale toho jsem se právě bál :D :) (spooousta čtení
dokumentace)
OK, asi nic jiného nezbývá, začnu seriálem https://www.zdrojak.cz/…obecny-uvod/
Trochu se bojím té paměťové náročnosti. už teď je 32 MB na hranici
spustitelnosti aplikace (velký adresář kontaktů, velká návštěvnost) a
nedokážu si představit o kolik to může narůst..
Mám tabulky cca 30+ mil. záznamů + ke každému jsou záznamy v dalších
5 tabulkách, celkem cca 200 mil. řádků. fulltext/filtrování výpisů
dělám přes sphinx, to překážka nebude.. Nicméně často je toho načteno
hodně(i stovky záznamů = stovky objektů) a i přes prvotní vyhledání ve
sphinxu se výsledek ještě spojuje z dalších tabulek, takže si to
o nějakou tu paměťm navícřekne už teď..
Často se tu mluví o doctrine, kdysi jsem si do poznámek hodil Kdyby/Doctrine, tak mrknu na ten seriál a testnu.
Editoval neznamy_uzivatel (28. 11. 2017 9:44)
- Petr Parolek
- Člen | 455
Ahoj, Doctrine je rozsáhlá knihovna, dopororučil bych Nextras ORM od @hrach , je jednoduché na pochoprení a je rychlé
- neznamy_uzivatel
- Člen | 115
Dík, mrknu na to..
každopádně mám za sebou 3 články seriálu a 2 náhodné jiné a klidně
bych mohl začít psát blog o tom, jak se můj svět obrací v gigantickou
kouli chaosu a nelogických zkratek :D
- janpecha
- Backer | 75
Jinak doporučoval bych ti přečíst si tenhle článek https://www.zdrojak.cz/…-doctrine-2/ – řadu věcí by ti mohl pomoci vyjasnit. Je primárně zaměřen na Doctrine2, ale to nevadí, hlavně popisuje základní rámec, kterého je ± dobré se při návrhu objektové části aplikaci držet. Pak už je víceméně jedno, jaké ORM reálně použiješ.
K architektuře aplikace se na Slacku Péhapkářů občas vyjadřoval i Ondřej Mirtes a měl docela dobré rady, které rozšiřovaly a ujasňovaly to, co se dočteš v tom článku na Zdrojáku. Zkusím ty jeho zprávy dohledat.
EDIT: zjistil jsem, že pár těch poznámek mám uložených v PC, hodil jsem je sem: https://www.janpecha.cz/…ra-aplikace/.
Editoval janpecha (28. 11. 2017 11:56)