Autor | Zpráva | ||
---|---|---|---|
Martin02 Profil |
#1 · Zasláno: 20. 10. 2014, 14:26:40
Ahoj,
nikdy jsem nepoužíval MVC, až na pár úprav v Prestashopu, a teď budu dělat jakýsi administrační systém využívající Nette fw. Není mi jasná jedna věc ohledně modelu. V Prestashopu jsem viděl techniku, že pro každou věc (produkt, kategorie produktů, stránka, uživatel...) existovala třída v modelu, která obsahovala všechny informace o dané věci (v podobě vlastností třídy; ty se v konstruktoru načítaly z databáze) plus nějaké funkce (metody) související s danou věcí. Takže je například třída User, která má vlastnosti jméno, příjmení, login, email... a metody například login(), logout(), isLoggedIn() atd. Když jsem četl v dokumentaci Nette fw vytváření ukázkové aplikace, tak se tam nic takového nepoužívalo. Místo toho se v presenterech data hledala přímo v databázi. Chci se tedy zeptat, co z toho je lepší? Děkuji |
||
Alphard Profil |
#2 · Zasláno: 20. 10. 2014, 14:42:33
Můžete uvést odkaz na dokumentaci Nette, kde jste to viděl? Teď se dívám, že popisované konstrukce obsahuje QuickStart, ten je ale třeba chápat jen jako seznámení se s frameworkem, je tam kladen důraz na jiné věci. Příklady nejsou komplikovány samostatným modelem.
V praxi samozřejmě tyto věci jsou v modelu, a to často v několikavrstevném. |
||
Martin02 Profil |
#3 · Zasláno: 20. 10. 2014, 14:58:44
Ano, měl na mysli právě ten Quickstart. Usuzuji tedy, že se tato technika běžné používá. Děkuji!
Mimochodem, co znamená zmíněný "několilavrstevný model"? |
||
juriad Profil |
#4 · Zasláno: 20. 10. 2014, 15:14:37
|
||
Alphard Profil |
#5 · Zasláno: 20. 10. 2014, 15:14:58
Viz např. PHP Guru » Pět vrstev modelu nebo se podívat na Architektura aplikace nad Doctrine 2. Ani jedno prosím nechápat dogmaticky, spíš přemýšlet o principu.
Obecně s komplexností aplikace může růst potřeba přidávat do modelu další vrstvy. Ten úvodní nástřel, že jedna entita je vždy popsaná právě jednou třídou taky není vždy ideální. |
||
Martin02 Profil |
Tak to už je na mě nějaké složité. Ale rád bych to na svém webu uplatnil...
Jestli to chápu dobře... Mám nějaký kontroler (v mém případě "definovaný" Nette frameworkem). V něm chci dejme tomu vypsat prvních 5 článků. Takže tento požadavek předám repozitáři ArticleRepository. Ten vytvoří instanci mapperu ArticleDbMapper, který sáhne do db, najde data, udělá z nich entitu ArticleEntity. Tuto entitu vrátí repozitáři, který si o ni zažádal a ten ji zase vrátí kontroleru, který z ní vypisuje data atd. V odkazovaném článku je uvedeno $article = $articleRepository->find(123); . To je myšleno tak, že v $article po provedení kódu bude entina ArticleEntity? Předpokládám, že ano. Co ale nechápu je, jak mohu teď volat settery na tuto entitu? Vždyť (jak je popsáno v článku) entita je jen "přepravka" na data. To se ten požadavek na akci (například editace článku) zase nějak předá příslušnému repozitáři a ten zase příslušnému mapperu, který pošle příkaz do db?
Přijde mi to takové divné, že když chci jen získat data, tak jde způsobem kontroler -> repozitář -> mapper -> entita. Ale při (například) editaci to jde jinou cestou. Snad je alespoň trochu pochopitelné, co nechápu... :) Děkuji za odpovědi! |
||
juriad Profil |
Martin02:
Setter normálně v entitě je. Přesunuly se jen metody find a save do repozitory (a mapperů).
Takže: $article = $articleRepository->find(123); $article->setAuthor('Pepa'); $articleRepository->save($article); |
||
Martin02 Profil |
#8 · Zasláno: 21. 10. 2014, 08:54:30
juriad:
Už to asi chápu. Díky moc! |
||
Časová prodleva: 10 let
|
0