Obalující funkce pro třídy (volání tříd)
- HosekPetr
- Člen | 31
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
- HosekPetr
- Člen | 31
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?
- HosekPetr
- Člen | 31
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
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).