Autor Zpráva
JiříK
Profil *
Ahoj, chtěl bych se zeptat na pár věcí ohledně OOP a objektového návrhu modelu, které si myslím že by pomohly i ostatním.
Mám docela problémy s rozumným OOP návrhem aplikace. Většinou místo OOP mi vznikne jenom soubor tříd, které nejsou moc dobře propojeny a metody v nich jsou spíše jenom jako funkce. Minimálně využívám dědičnost, rozhraní... a chtěl bych to zlepšit. OOP docela umím, programuji i v C# a tam tento problém nemám.
Například Budu mít třídu UserManager, která bude mít za úkol přihlašovat, registrovat a získávat údaje o uživateli. Bude tam metoda UserManager.save(array $data) v proměnné data bude třeba pole POST z formuláře. Jenomže bez znalosti atributů name ve formuláři nedokážu uživatele uložit. Lepší by tedy bylo mít metodu UserManager.save(User $u), zde je ale problém že budu muset pole POST nejprve převést na třídu User. Stejně tak když budu uživatele vypisovat. Metoda UserManager.getUser() mi vrátí opět pole. Když budu chtít k uživateli zjistit nějaké další informace o něm, například jaká má auta v garáži, tak musím zavolat UserManager.getCars($idUser). Hezčí by přece bylo kdyby getUser vracela objekt User a ten měl metodu getCars.
Pak by to vypadalo UserManager.getUser()->cars. vešlo by se to pohodlně na řádek.

Další s čím mám velké problémy, je že většina metod je použitelná jen jednou. Mám třeba metody UserManager.existUserById, existUserByEmail...
Stejně tak když budu chtít vypisovat nebo řadit pokaždé podle jiných kritérií. musím mít na to pokaždé jinou metodu, nebo mít třeba UserManager.getUser(string where), ale to se mi příliš nelíbí.
Jak to řešíte vy? Dá se třeba na internetu najít nějaký rozsáhlejší příklad návrhu modelu? Většina příkladů na OOP nebo MVC je řešena dost jednoduše a není tam pořádně ukázáno jak používat návrhové vzory a jak navrhovat větší aplikace.
Bylo by třeba fajn toto téma zpracovat do Učebnice PHP která tu vzniká. když se učíte OOP, většina publikací vám to ukáže na příkladu třídy typu DopravníProstředek, od něho dědí OsobníAuta... na tom OOP pochopí každý ale když máte navrhnout rozsáhlejší projekt, jste s tímhle v koncích.

Předem děkuji za rady od zkušenějších :)
Jan Tvrdík
Profil
Nehledas prostě ORM?
JiříK
Profil *
No o ORM jsem přemýšlel, ale přijde mi to jako jít na komára s kanonem. Spíš bych se chtěl naučit si dobře navrhnout strukturu aplikace. A zde jsem vypsal pár problémů které nevím jak řešit. Když použiji ORM, vyřeším si sice situaci, ale nenaučím se navrhnout dobře aplikaci.


Spíš než použití nějakého ORM frameworku bych rád zkusil si nějaké jednodušší drobné řešení napsat sám. Používám Nette a tak bych to chtěl udělat nad Nette\Database\COntext, ale nevím pořádně jak.
Karel N.
Profil *
Jsou věci, které vám budou dávat smysl až bude mít v hlavě teoretický základ. Pokud chcete lépe řešit "OOP", naučte se jaké jsou návrhové vzory a jak je možné logiku/třídu/process zapsat, ať to nemusíte vynalézat kolo. Kolegům dávám jako referenci tenhle repositář https://github.com/domnikl/DesignPatternsPHP a odmítám se s nimi o tom bavit dříve, než všichni rozumíme pojmům bridge, facade, multiton atd. Poté je diskuze ne o tom jak to v php zapsat, ale jestli je lepší v tomhle případě použít adapter nebo decorator a jaké si představujeme použití.

Krátce, buď k formuláři bude mapper, který zná formulář a zná třídu User nebo třeba z třídy user budete tvořit prvky formuláře, poté už můžete k mapování použít generickou metodu. Řešení je mnoho, mysli na to, že z formuláře může přijít cokoliv (chyba na straně kodéra, někdo si nám hraje s formulářem).

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: