Továrna na komponentu, interface nebo ne
- kleinpetr
- Člen | 480
Ahoj,
chci se zeptat jaký je rozdíl mezi těmito způsoby:
- s interfacem
soubor MyControl.php
class MyControl extends UI\Control
{
private $myVariable;
private $translator;
public function __construct($myVariabel, ITranslator $translator, ...){
parent::__construct();
$this->myVariable = $myVariable;
$this->translator = $translator;
}
public function someFce(){
...
}
}
soubor IMyControlFactory.php
interface IMyControlFactory
{
/** @return Component\MyControl */
function create($myVariable);
}
a nyní si přidám interface do configu a v presenteru zavolam
pres $control->create($myVariable);
- bez interfacu
soubor MyControlFactory.php
class MyControl extends UI\Control
{
private $myVariable;
private $translator;
public function __construct(ITranslator $translator, ...){
parent::__construct();
$this->translator = $translator;
}
public function create($myVariable){
$this->myVariable = $myVariable;
...
return $this;
}
public function someFce(){
...
}
}
do configu si zaregistruju přímo tuhle factory a v presenteru zavolám
uplně stejně $control->create($myVariable);
Jaký je v tom tedy rozdíl ?
- David Matějka
- Moderator | 6445
Ty neregistrujes tovarnu, ale primo komponentu. A to volani create() volas uz na komponente a bude to vracet porad stejnou instanci.
Registrovani komponenty jako sluzby tu uz bylo mnohokrat rozebirano, tak jen ve zkratce: bude to zpusobovat problemy, pokud napriklad budes chtit komponentu pouzit vicekrat, muze to zpusobovat problemy pri internich forwardech (napr na error presenter)
Ten interface je jen zjednoduseni, nette dle toho vygeneruje klasickou tovarnu, viz treba http://zlml.cz/…nitive-guide
- kleinpetr
- Člen | 480
Aha, tak už jsem to pochopil. Ten interface vytváří novou instanci celé té komponenty. Zmátlo mě totiž v čistém sandboxu je signInForm, který je rovnou jako factory a má metodu create() ovšem mi nedošlo, že právě v této metodě vytváří novou instanci UI\Form, kterou poté vrací, takže se to vlastně jako továrna počítá.
Editoval kleinpetr (19. 11. 2015 15:37)