Obalující funkce pro třídy (volání tříd)

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

Dobrý den,

pokusím se co nejlépe nastínit svou myšlenku. Možná se to tu už řešilo, jen jsem to špatně pojmenoval, ale nic jsem nenašel, jsem samouk a některé „slangové“ výrazy neznám. Tak se předem omlouvám.

Mám třídu v models, která řeší generování různých dokumentů z šablony.

Příklad použití:

$newDoc = new GenerateXy();
$newDoc->setV1($value1);
$newDoc->setV2($value2);
$newDoc->setV3($value3);
$newDoc->setV4($value4);
$newDoc->setV5($value5);
$newDoc->setV6($value6);
$newDoc->setV7($value7);
$newDox->generate();

Tuto třídu nebo jakoukoli jinou budu používat všude možně v aplikaci a já bych jí chtěl zabalit do jedné jediné funkce, kterou si pak budu někde volat.

1. otázka: Kam takovéto funkce umístit (adresářová struktura), aby to bylo best practices! Případně jak úplně jinak, ale správně to řešit?

Mě napadlo udělat si pár servisních tříd (ServisDocuments) v models a v nich mít statické třídy. Výhodou je pohodlný přístup.

2. otázka: Ta mě teď napadla. Statickými funkcemi teď řeším DB (dibi a mssql), mám v několika třídách, které jsou nazvané podle nějaké „entity“, ke které se vztahují, statické funkce, které pak volám kde potřebuji a dostanu to co chci.

Mě osobně toto řešení přijde jako velice účelné, mám funkci, která se k něčemu vztahuje. K čemu je zjistím z názvu a v ní mám jen sadu dotazů a nějakou logiku, aby mi vracela to co potřebuji. Rád si k tomu vyslechnu názory a poučím se!

Nějaký model o pěti vrstvách mi přijde zbytečný. Odporuje toto použití něčemu? Pokud je nějaké podobně pohodlné, ale best practices řešení, prosím o příklad/odkazy.

Předem děkuji za reakce

enumag
Člen | 2118
+
0
-

Možná jsem si to špatně přečetl, ale jak se to liší od klasické FileTemplate? Předáš jí proměnné a název .latte souboru, zavoláš __toString() a uložíš do souboru…

HosekPetr
Člen | 31
+
0
-

enumag napsal(a):
......

Velice děkuji za reakci, radši upřesním, že se zde vůbec nejedná o práci s šablonami Nette. Jedná se o práci s docx soubory. Kde mám šablonu a tu naplním daty a nastavím jak potřebuji.

Mě se jedná o FUNKCI, kterou obalím nějaké volání této třídy a kde nastavím potřebné parametry. V projektu na kterém teď pracuji se tato třída bude používat na X místech, protože se vše ukládá také do souborů. A já chci nějaký nejčistší/nejlepší postup, jak s těmito obalujícími funkcemi nejlépe/nejšistěji pracovat.

A celkově mi jde o to jak používat takovéto ZAPOUZDŘUJÍCÍ FUNKCE.

Další věcí je, že tuto třídu, která pracuje s docx soubory mám v models. Nepatří někam jinám? Možná komponenty? Nebo tam být může?

enumag
Člen | 2118
+
0
-

Neměla by to v tom případě být tvá vlastní knihovna v adresáři libs?

HosekPetr
Člen | 31
+
0
-

To je to co chci vědět. :-) Dát to do libs mě nenapadlo, asi to je také řešení. Ale kam s tou funkcí, kterou to celé zdlouhavé vytváření instance a nastavování settery zapouzdřím?

A co to použití těch statických funkcí pro databáze? Je to správně nebo není? To mě také zajímá.

enumag
Člen | 2118
+
0
-

Statické metody jsou obecně špatně, až na případy jako je třída Nette\Strings.

Pokud je zapouzdřovací funkce pořád ještě obecná, může být klidně v libs. Pokud je project-specific tak do modelu.

A měla být spíše třída dle návrhového vzoru Factory než funkce (ať už bude kde chce).