použití form factory v komponentě
- Magnus
- Člen | 65
Ahoj,
Mám komponentu, která je využita na více místech aplikace, ve kterých
je společně s ní potřeba vykreslit různé formuláře. Ty jsou
v několika form factories, a pokud bych je chtěl předávat jako závislosti
konstruktorem, vzniklo by mi těch závislostí mnoho. Je chyba, když si
nechám danou form factory injectovat do presenteru (pomocí autowire) a
odkazovat na ni z komponenty?
Jinými slovy, zda je toto špatný návrh:
<?php
class Presenter
{
/**
* @var FormFactory
* @inject
*/
public $formFactory;
/**
* @var ControlFactory
* @inject
*/
public $controlFactory;
public function createComponentControl()
{
return $this->controlFactory->create();
}
}
class Control
{
// zde se zbavím přímé závislosti na form factories
public function __construct(...)
{
}
public function createComponentForm()
{
return $this->presenter->formFactory->createForm();
}
}
?>
Případně jak takovou situaci řešit?
Díky!
Editoval Magnus (13. 5. 2016 12:06)
- David Matějka
- Moderator | 6445
Ano, je to spatny navrh. Vyuzivas presenter jako nejaky service locator pro komponentu, ve ktere skryvas zavislost.
Pokud chces dostavat do (base)komponent vice zavislosti a nechces si zasirat konstruktor, pouzij inject metody/anotace v komponente a zkombinuj s decorator extension (bud ze pomoci toho zapnes u basecontrol inject, nebo rucne vyjmenujes inject metody, ktere se maji autowirovat). Ukazku decorator extension najdes v testech https://github.com/…n.basic.phpt