Rozdíl mezi komponentou a modulem z hlediska použití

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

Ahoj, mám dotaz. Pokud bych si představil web kdy bych chtěl mít jeho jednotlivé části nezávislé na ostatních a znovupoužitelné (např. registrace uživatelů, nákupní košík, výpis a správa článku, diskuse…) tak je lepší tyto části udělat, co se týká struktury, jako zvláštní modul se složkami presenters, templates, models popř. dalšíma nebo jako komponentu?

Přijde mi to vlastně stejné – v komponente budu mít taky model, presenter a šablonu.

Můžete mi prosím nějak vysvětlit hlavní rozdíl popř. co kdy je lepší použít? Mám teď trošku hokej v pojmech asi :) díky moc

Jiří Nápravník
Člen | 710
+
0
-

V komponente nejaky modul, presenter apod není…

Modul většinou zabaluje větší funkcionalitu včetně komponent. Například budeš mít ProductsModule – kde budeš mít vše týkající se správy produktů. Přidávání, mazání, upravování, nastavovaní modulu, výpis. No a komponenta je většinou nějaká menší, například budeš chtít někde vypsat nejprodávanější zboží → komponenta, apod.

Modul může obsahovat komponenty. Komponenta moduly nikoli.

spiider
Člen | 162
+
0
-

Hm chápu, takhle nejak jsem si to myslel. Docela bych chtěl vidět tohle v praxi jak je to řešené, co se týka struktury a volaní jednotlivých komponent z modulů apod. Není někde nějaký příklad?

Diky

ZZromanZZ
Člen | 87
+
0
-

Zpravidla nebývá snadné oddělit od sebe moduly na všech úrovních MVP. Často pak vidím, jak lidi používají jenom něco jako FrontendModule a BackendModule.

akadlec
Člen | 1326
+
0
-

Tak to je dost závislé na samotné aplikaci. Můžeš si udělat modul co bude obsahovat modely, presentery, komponenty atd. Jednotlivé komponenty si pak voláš v potřebných presenterech a nebo si je voláš napříč aplikací v jiných presenterech.

akadlec
Člen | 1326
+
0
-

@ZZromanZZ: proč? záleží jaký modul to je, ale zpravidla jsou jednotlivé moduly aplikace na sobě závislé.

ZZromanZZ
Člen | 87
+
0
-

Je pak otázka, proč samotné moduly vůbec řešit pro něco jiného než je jenom zpřehlednění a logické oddělení kódu(tříd, komponent, presenterů, šablon, atd. atd…), když je stejně nelze jednoduše z aplikace vyčlenit a použít v jiné aplikaci.

Editoval ZZromanZZ (1. 4. 2014 15:09)

akadlec
Člen | 1326
+
0
-

Tak záleží jak je vyčleníš. Já třeba mám accountmodul který mám ve dvou appkách a je jedno ve které je, má sice nějaké závislosti na hlavním appmodulu ale ty se duplikují do projektu taky.

ZZromanZZ
Člen | 87
+
0
-

To si myslím, že je správně. Modul by měl být chápan jako odpojitelná součástka a použitelná někde jinde (závislosti na externích knihovnách nejsou problém). Pokud to odpojitelné nemá být asi nemá IMHO smysl moduly používat.

Další věc je ta, že Nette modul, nemusí být nutně shodný s tím, co zákazníkovi představujeme jako modul(co si zaplatí platí a co mu aktivujeme).

spiider
Člen | 162
+
0
-

Takze kdyz budu mit modul kosik tak ten asi bude zavisly na modulu zbozi ne? Pak by asi kosik nemel byt modul ale komponenta uvnitr modulu zbozi…? Jde mi o tuto zakladni logiku veci :)

Diky za nazory

ZZromanZZ
Člen | 87
+
0
-

V tomhle úplně radit nechci, neznám požadavky na implementaci. Ale takové členění mi na první pohled přijde zbytečné. Asi bych volit FrontModule a v rámci něho presentery/komponenty, které budou řešit tvou problémovou doménu.

Jiří Nápravník
Člen | 710
+
0
-

spiider: tohle je dost individualni a zavisi to spise i na tobe, jak to chces mit. Ja bych treba modul kosik nedelal. Ale mel bych modul na objednavky a v nem by byla komponenta ci jen presenter na kosik.

ZZromanZZ: mě dává smysl rozdělit si to na moduly, i když to nejde vzít celý modul a zkopírovat ho jinam. Když máš větší aplikaci, tak je to o dost přehledníjší než mít modul backend a frontend. Stejně tak když pak budu chtít nakopírovat třeba UserModule někam, tak je to snazší vzít takhle, než to vyzobávat v backend a frontmodule. I přesto, že to není „plug&play“ – třeba mém případě je závislý usermodul na MailModule a presentery dědí z appmodule…

spiider
Člen | 162
+
0
-

Vim ze je to dost individualni ale zajimal me pohled nekoho jineho jak by to resil. Jenom pro shrnuti:
Modul: Spis pouzit pro obsahlejsi casti
Komponenta: Spis pro mensi cast a muze byt soucasti modulu

A jeste pro priklad…dejme tomu ze bych mel modul „users“ ktery by obstaraval registraci,prihlasovani a spravu uzivatelu.

Jak by pak mohla vypadat jeho struktura?

Editoval spiider (1. 4. 2014 16:24)

ZZromanZZ
Člen | 87
+
0
-

Komponenta je vždy třída dědící Nette\Application\UI\Control, což by měla být zpravidla renderovatelná součást stránky a mělo by se tak s ní zacházet. Kdežto modul je v podstatě namespace.

Jiří Nápravník
Člen | 710
+
0
-

spiider: Zkrátka modul je taková obála/složka/namespace, která se zabývá jednou částí aplikace.

Já mám ten UserModule tak, že v něm mám ještě
FrontModule:
tam mám presenter pro prihlaseni,registraci, zapomenute heslo
komponenty – to jsou formulare pro jednotlive ty akce (registrace, prihalseni etc)
AdminModule:
tam jsou veci tykajici se uprav z pohledu adminisratora

A v samotném UserModule mám pak ještě Modelové třídy, které jsou přímo v UserModule, protože jsou využívány obema pod-moduly.

David Matějka
Moderator | 6445
+
0
-

@ZZromanZZ: pokud je komponenta nerenderovatelna, mela by dedit od PresenterComponent

henryjames
Člen | 1
+
0
-

I had done the things but it is not workinhg