Kam správne umiestniť službu
- Unlink
- Člen | 298
Zdravím
presentery umiesnujeme do zložky Presenters
modely do Models
templaty do Templates
Rád vedel, ako riešite umiestnenie služieb. Mám povedzme nejaký modul, a
tento modul odosiela nejakým spôsobom maily a keďže to nechceme mať všetko
v presenteroch, tak si na to spravíme službu (Triedu). Kam takúto triedu
umiestniť? Myslím že by mala byť pri danom module.
Mám si vytvoriť zložku Services alebo ako podobnú situáciu riešite?
Ďakujem
- Unlink
- Člen | 298
No to áno
Ale situácia je takáto, mám aplikáciu ktorá spravuje rezervácie. Jeden
používateľ vytvorí rezerváciu a iný (na to oprávnený) ju môže
potvrdiť.
Teraz to chcem rozšíriť o emaily. Pri vytvorení rezervácie sa pošle email všetkým zodpovedným osobám a následne pri potvrdení / zamietnutí sa pošle email autorovi rezervácie.
Chcel by som si na to spraviť službu, táto služba bude potrebovať
Mailer, LatteFactory (aby som mohol renderovať obsah toho emailu zo šablóny)
a presenter?
Pretože mám ešte staršie nette takže si na tvorbu linkov nemôžem
injektnúť link factory.
A nejako sa mi nepozdáva, že trieda s takýmito závislosťami by mala
byť medzi modelmi.
Idem na to dobre, alebo by sa to celé malo riešiť inak?
Ďakujem.
- Michal Vyšinský
- Člen | 608
Model je prakticky veškerý kód aplikace. Model není nic konkrétního a může pracovat s čímkoliv, databáze, queues, soubory…
Prakticky můžeš použít rozdělení třeba takto:
- app/Presenters
- app/Mailer
- app/Bookings
atd.
prakticky ti rozdělení do modelu přidá jednu složku navíc ale nic tím nezískáš
Editoval Michal Vyšinský (13. 4. 2015 16:20)
- Šaman
- Člen | 2640
Já si to myslel. Zjednodušeně se dá říct, že model je všechno, co
zůstane, pokud stejnou aplikaci budeš chtít provozovat jako web, jako
desktopovou aplikaci i jako konzolovou aplikaci ovládanou z příkazové
řádky.
Změní se jen způsob prezentování (třeba terminálová aplikace ovládaná
přes telnet bude mít úplně jinak řešené prezentování formulářů), ale
třeba definice formuláře, validační pravidla polí a zpracování
formuláře zůstává stejné (třeba pole email musí mít ve všech třech
podobách aplikace stejný formát a ve všech aplikacích se na něj má
odesílat stejná zpráva).
Tohle je už trochu extrémní příklad, ale pro oproštění od představy,
že model === data access objects
je dobrý. V reálu dochází ke
kompromisům, takže model občas něco ví o existenci presenteru, ale
v ideálním (a nejlépe testovatelném) případě opravdu emailer netuší
kdo a proč ho bude volat, jestli klasická Nette aplikace, nebo nějaký
standalone script spouštěný CRONem. Jestli má jasně stanovené vstupy
(ideláně rozhraní), tak si ho může zavolat kdokoliv odkudkoliv.
Editoval Šaman (13. 4. 2015 17:47)