MVC použití DI pro Model místo statických funkcí

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Bendergast
Člen | 8
+
0
-

Zdravím,
Procházím fórum a nikde nemůžu najít kloudnou odpověď na to proč je nyní lepší používat modely registrovány pomm ocí DI než předtípomocí statických funkcí.

Pomocí DI se mi to zdá zbytečně složité, protože pokud mám více modulární aplikaci kde budu pro každý modul používat vlastní model a budu mít například 30 modulů pak musím registrovat 30 services a navíc pokud budu chtít použít funkce skrze moduly mosím pořád injectovat.

Díky za odpověď, a pokud je to hloupý dotaz, omluvte to prosím :)

David Kudera
Člen | 455
+
0
-

Např. tady je jedna z posledních otázek na fóru link. Je jich tu všude ale mnohem víc o tom, proč by bylo ideální nepoužívat na to statický přístup.

Bendergast
Člen | 8
+
0
-

jenicek napsal(a):

Serie článků o DI

články jsem si pročetl. Chci se spíše zeptat na názor pro Best Practice, používám teď DI pro vytváření připojení k databázi. Jelikož aplikace obsahuje více modelů, musím každý model zapsat do configu, existuje nějaké lepší řešení, zkoušel jsem injectování, ale moc mi to nejede.

Pavel Macháň
Člen | 282
+
0
-

Bendergast napsal(a):

jenicek napsal(a):

Serie článků o DI

články jsem si pročetl. Chci se spíše zeptat na názor pro Best Practice, používám teď DI pro vytváření připojení k databázi. Jelikož aplikace obsahuje více modelů, musím každý model zapsat do configu, existuje nějaké lepší řešení, zkoušel jsem injectování, ale moc mi to nejede.

DI využívat ± všude. Nette ti krásně injectne závislosti a 1 řádek v configu navíc nikoho nezabije.
Pokud máš modulární aplikaci tak každému modulu vytvoř Extension, který zaregistruje požadované služby. Díky tomu budeš mít krásně znovupoužitelný modul, který stačí pak regnout v configu.

Bendergast
Člen | 8
+
0
-

Pavel Macháň napsal(a):

Bendergast napsal(a):

jenicek napsal(a):

Serie článků o DI

články jsem si pročetl. Chci se spíše zeptat na názor pro Best Practice, používám teď DI pro vytváření připojení k databázi. Jelikož aplikace obsahuje více modelů, musím každý model zapsat do configu, existuje nějaké lepší řešení, zkoušel jsem injectování, ale moc mi to nejede.

DI využívat ± všude. Nette ti krásně injectne závislosti a 1 řádek v configu navíc nikoho nezabije.
Pokud máš modulární aplikaci tak každému modulu vytvoř Extension, který zaregistruje požadované služby. Díky tomu budeš mít krásně znovupoužitelný modul, který stačí pak regnout v configu.

Díky. Akorát, mužeš mě nakopnout s tím extension? Až do teď jsem jel ve statických třídách v modelu.

David Kudera
Člen | 455
+
+1
-

Tady je dokumentace a kdyžtak koukni i jak to třeba řeší různé doplňky

Bendergast
Člen | 8
+
0
-

Chvili si hraju s extensions ale nedari se mi udelat to co chci. Konkretne mam Acl, a chci aby kazdy modul v sobe obsahoval definici resources, podle DB si overim uzivatelske prava. Nevim jak spravne napsat pro jednotlive moduly extensions aby predali do authorizatoru resources.

EDIT: nakonec to mam udelane tak ze kazda extension prida svoje resources do parametru v contextu a pak si na to saham a overuju to vuci databazovym zaznamum

Editoval Bendergast (2. 8. 2014 19:08)

Tomáš Votruba
Moderator | 1114
+
+1
-

@Bendergast Prohlédni si provider a extension u Kdyby\Translation.

Tvé extension implementuje provider (zde ITranslationProvider). Metoda, kterou interface vyžaduje pak vrací cestu ke slovníkům. Hlavní extension (zde TranslationExtension), pak vyhledá všechna rozšíření implementující tento provider a načte tak všechny slovníky.

V tvém případě uděláš to samé, jen metoda bude vracet definici resources.