Zadejte hledaný výraz...

Ideální práce se třídou

Ondřej Záruba
verified
rating uzivatele
1. 9. 2011 14:18:52
Zdravím,
... doufám že nebudu označen za spamera (2 posty behem 10 minut) :)
Pročítám si tu nedávné téma "Oop v praxi" a zastavil jsem se u jednoho příspěvku
Přivedlo mě k jedné myšlence, a zajímal by mě názor ostatních...
Do teď, když jsem pracoval s třídami, pracoval jsem tímto způsobem
$class = new myClass;
$class->setValue('text', 'Hello word');
$calss->setTag('strong');
echo $class->write();
Když jsem četl výše odkázanou reakci a trochu jsem o tom přemýšlel, nemůžu říct že by to byla bůh ví jaká myšlenka, ale napadlo mě jiné řešení.
Předat všechno co chci už při inicializaci třídy a pak automaticky vypsat inicializovanou proměnou.
Když ukáži na stejném příkladu
$class = new myClass(array('text' => 'Hello word', 'tag' => 'strong'));
echo $class
Není do doladěné, způsob předávání parametrů by se dal upravit, toto asi nebude ideální zápis ale pro pochopení toho, o čem přemýšlím je to snad dostačující.
Přemýšlel jsem o výhodách a nevýhodách tohoto řešení a nejsem si jist, jestli jsou závěry správné, ale přece...
Výhoda:
Přijde mi, že by funkce byla "bezpečnější" jediná veřejně přístupná část by byla inicializace třídy zbytek metod a vnitřních pochodů by mohl zůstat skryt a z venčí nepřístupný
Nevýhoda:
Pokud bych potřeboval funkci volat i jinde a víckrát nepřijde mi toto řešení ideální inicializovat pořád dokola tu samou třídu je nesmysl, ale dalo by se to řešit ještě jednou volně přístupnou funkcí, které by jsem říkali co vlastně chceme vrátit...
Ale jak jsem řekl, zajímal by mě názor zkušenějších, při svých znalostech oop bych se nedivil kdyby to byla holá kravina....
1. 9. 2011 14:18:52
https://webtrh.cz/diskuse/idealni-prace-se-tridou/#reply672965
Odhalit jen konstruktor a předávat mu parametry má určitě smysl, akorát si dejte pozor
- Abyste konstruktorem předával jen to, co třída bezpodmínečně potřebuje, bez čeho se neobejde.
Podmínečné parametry, které třída využije jen někdy, předávejte raději konkrétním metodám. (Ačkoliv tyto podmínečné parametry můžou být zase příznakem toho, že metoda by měla být na jiném objektu)
- Že, pokud odhalíte jen konstruktor, parametry nepotřebujete během života objektu změnit.
Pokud budete chtít používat objekt jako řetězec, nezapomeňte implementovat __toString();
1. 9. 2011 14:56:29
https://webtrh.cz/diskuse/idealni-prace-se-tridou/#reply672964
$class->write()
je naprosto v poradku, s tim nic nedelej, jedine, cim bys to mohl zlepsit je predat streamu, do ktere se bude zapisovat:
$class->writeTo($buffer)
to predavani parametru pri inicializaci tridy je v podstate constructor injection - zagoogluj ohledne "constructor injection vs. setter injection" a mel by ses dozvedet, ze oba zpusoby maji sve vyhody a nevyhody - a hlavne proc.
ve zkratce je vetsinou lepsi constructor injection, tzn. neco jako jsi ukazal, jen bez pole, ale obcas setter proste potrebujes - pokud jde o neco, co bezi delsi dobu a je realne, ze se vymeni implementace za chodu - jako treba aplikacni server (to te ale ted trapit nemusi)
1. 9. 2011 15:17:48
https://webtrh.cz/diskuse/idealni-prace-se-tridou/#reply672963
Pro odpověď se přihlašte.
Přihlásit