Autor Zpráva
Jirin
Profil
Zdravím,
chci používat v aplikaci pětivrstvý model - jako je např. popsáno zde: http://www.zdrojak.cz/clanky/architektura-aplikace-nad-doctrine-2/ případně u Jana Tichého www.phpguru.cz/clanky/pet-vrstev-modelu .

Používá jej celkem takto dost lidí a přijde mi určitě rozumné a pochopitelné. Nicméně mám otázku ohledně toho co má být v repository (resp DAO) a co spíše ve fasádě. Oba případy používají třeba u článku metodu publish a dávají ji do fasády, kde nastaví nějaké věci a pak teprve volají repository a tam to uloží.

Já osobně chápal vždy fasádu v podstatě jako velmi tenkou vrstvu, která má povětšinou jedno/dvou řádkové metody, které zavolají repository a tahle logika, jako nastavit změnu statusu u článku apod. a uložit řeší až repository a fasáda by tedy defacto jen zavolala repository a předala vše ze vstupu a zavolala flush do databáze.

Uvedu několik příkladů a prosím o radu, jak to správně použít a budu rádi i za odůvodnění:
1. mám nějaký objekt, chci jej uložit. Z controlleru dostanu ten daný objekt a nevím jeslti bude insert nebo update, to si zjistím podle toho zda mám nastavené id. Tak a teď otázka, mám zjišťovat zda to id je nastaveno ve fasáde a v DAO volat už insert či update, nebo v DAO?
2. Chci mazat záznam z dtb. Potřebuji zjistit, zda existuje vůbec záznam s tímto id, pokud ne vyhodím exception, pokud ano, najdu entitu a tu smažu. Mám řešit to zda záznam existuje ve fasádě, případně i tu samotnou entitu najít a do DAO pro samzání poslat už samotnou entitu, či proste vzít id a probublat ho až do DAO a tam to řešit teprve?
3. Budu mít například stromovou strukturu a tam budu chtít posunout například nějaký prvek jinam. Či-li budu muset upravit jak stávající entitu, tak ty entity ostatní dořadit jak se mají apod. To dořazení apod, dělat ve fasádě nebo v DAO?
4. A ještě kde vlastně má správně vznikat entita? Například dostanu informace z formuláře, v controller uzpracuji a už tam vytvořím entitu a naplním to tam? Chápu to dobře?
loyza
Profil
Zdar,
v každém případě si myslím, že ať to uděláš jakkoliv bude to dostatečně dobré a ani jedna z těch možností není vyloženě špatně. Nejlepší je udělat a upravovat nějakou aplikaci v praxi a zjistit který přístup ti vyhovuje nejvíc a ten pak používat. Nikdo netvrdí, že to musíš od začátku mít nejlepší a nikdy to neupravovat. Refactor je standardní součástí programování.

Popíšu jak to řeším já (a netvrdím, že to je ta nejlepší cesta). Mám dvě vrstvy: DAO a repository. Ne vždy, samozřejmě, ale občas to tak dělám. V repository mám jenom SQL dotazy nic víc, žádnou logiku. Pokud potřebuju nějakou logiku tak to nechám v tom DAO. Je to přesně ten případ jaký jsi popsal v bodě 1 a 3. Pak můžeš reusnout ty kódy, můžeš chtít volat jenom jednu část a když to rozdělíš, tak to půjde snadno.

Bod dva: neřeším, prostě pošlu DELETE FROM bla WHERE bla a pokud tam nic nebylo, tak se tvářím že jsem to smazal.

S vznikem entity: Podle mého by entita měla vznikat co nejdřív. V každém případě bys neměl přistupovat k jednotlivým částem těch dat bez toho aniž by byly v entitě. Pokud přijdou data z formuláře, tak před tím než je začneš v tom controlleru zpracovávat, tak z nich uděláš entitu.

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: