Využití komponent v různých frameworcích

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

Zdravim, mám takový možna trochu hloupý dotaz, týkající se komponent. Dá se nějakým způsobem vytvořit komponenta, kterou je možné použít jak v různých frameworcích, tak v čistém PHP? Dejme tomu, že se komponentě musí předat i připojení k DB.
Mám za to, že se dá vytvořit komponenta jen tak, že jde znovupoužít jen na daném FW. To např z toho důvodu, že každý frame může mít odlišný způsob v přístupování k DB. To by však šlo obejít vytvořením nového spojení DB v komponentě, což se mi ale nezdá jako dobré řešení.

Má na tohle někdo svůj názor osvědčený praxí?
Předem díky.

frosty22
Člen | 373
+
0
-

Tady vůbec nejde o názor, na tohle je naprosto jednoduchá odpověď – prvně záleží, co si představuješ pod pojmem komponenta. Pokud komponentu, jako je v Nette, pak se jedná o buď vizuální či nevizuální samostatnou část webu – vizuální například anketa, nevizuální napříkad knihovna generující faktury. V těchto případech jde o to, do jaké míry využívá framework, jako takový. Pokud bys chtěl udělat knihovnu, která by byla standalone, potom bys nesměl používat žádné objekty Nette, a ani tedy například Nette/Database, v podstatě uplně jednoduše – všechno jsou jen závislosti dané komponenty, na tom co je závislá, to je potřeba dodat.

Pokud postavíš komponentu která bude používat Nette/Database, pak je toto logicky vyžadováno a musel bys ji pak použít spolu s frameworkem a nebo tyto knihovny vypreparovat a přiložit, což je nutné tedy stromově tj. každý další objekt používá další části, například základní objekt Nette/Object …

Toto tedy není přímo odpověď na otázka, ale chci tím říci, že odpověď ani není a z tohoto vyplývá, pokud chceš udělat standalone komponent, nesmíš použít výhod frameworku.

gavec
Člen | 68
+
0
-

Jasně, chápu. V případě té vizuální komponenty z toho tedy plyne, že se dá použít taktéž pouze ve spojení s daným frameworkem. Hlavně z toho důvodu, že FW`s používají různé šablonovací systémy.

mkoubik
Člen | 728
+
0
-

Hlavně z důvodu, že dědí třídu Nette\Application\UI\Control, která je součástí frameworku.

frosty22
Člen | 373
+
0
-

Přesně tak, a když se pak podíváš, co využívá Control, tak zjistíš, že další objekty z Nette, a ty opět další objekty, atd. V podstatě framework je balík objektů, které spolu komunikují, jsou svázány a definují pravidla/význam/možnosti následné aplikace.

Na tvém místě bych si spíše kladl otázku, zda-li opravdu je potřeba stavět standalone komponentu – přeci jen pokud se jedná o vizuální, pak její funkční část může být jako knihovna zvlášť a v podstatě i měla by tak být a následná implementace pak může být jako driver pro Nette, Zend, standalone… u tohoto však, čím více to odstíníš, tím více práce to dá a tím méně budeš moci využít možností frameworku, viz zmiňové připojení do databáze, apod.

Například nějaký generátor faktur do PDFka – můžeš udělat objekty zvlášť, které budou generovat PDFko, budeš mít zvlášť HTML šablonu a sám v ní použiješ něco jako: echo $invoiceNumber, apod. a potom jen uděláš driver pro Nette, kde to napojít na komponentu, které se budou předávat data. Nebo si ulehčíš práci a použiješ latte, ale pak bys již musel i toto suplovat buď na úrovni driveru.
⇒ tady je právě vidět to ulehčení ve frameworku, a záleží na Tobě, jak moc se ti vyplatí to dělat standalone.

gavec
Člen | 68
+
0
-

Tak už v tom mám víc jasno. Díky za objasnění :)