Jak správně na „objekt“ – článek, zboží, komenář (s Nette Database)

neznamy_uzivatel
Člen | 115
+
0
-

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 | 1180
+
+2
-

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
+
0
-

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
+
0
-

Ahoj, Doctrine je rozsáhlá knihovna, dopororučil bych Nextras ORM od @hrach , je jednoduché na pochoprení a je rychlé

neznamy_uzivatel
Člen | 115
+
0
-

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

Petr Parolek
Člen | 455
+
0
-

Tady je dokumentace https://nextras.org/orm/docs/2.2/

janpecha
Backer | 75
+
0
-

Případně můžeš kouknout ještě na Lean Mapper.

janpecha
Backer | 75
+
0
-

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)