ServiceLocator a parametr $need
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.

- pmg
- Člen | 372
Parametr $need pěkně využíval faktu, že PHP není Java, a
odstraňoval duplicitu z kódu. Tedy až do poslední
úpravy ServiceLocator.
if (Environment::hasService('Nette\Security\IAuthenticator')) {
$handler = Environment::getService('Nette\Security\IAuthenticator');
} else {
// ...
}
// vs
$handler = Environment::getService('Nette\Security\IAuthenticator', FALSE);
if ($handler === NULL) {
// ...
}
Líbí se mi, když obecná metoda getObject rozlišuje
dva stavy:
- Objekt je skutečně potřeba. Metoda se jej v případě potřeby pokusí vytvořit, nebo vyhodí výjimku. (default)
- Chci zjistit, jestli nějaký objekt byl nastaven, a popř. upravit nějaká nastavení. Nechci, aby metoda zbytečně vytvářela objekt výchozí.
Pokud by ServiceLocator parametr $need podporoval,
stačila by mi metoda:
public function getObject($need = TRUE)
{
return Environment::getService('Object', $need);
}
místo dvou metod getObject a isObject, nebo metody
getObject s několikrát delším kódem.
Je skutečně potřeba, aby měla metoda Environment::getService
parametr $options? Není jednodušší zavolat metodu
setOptions, popř. jakákoliv další nastavení ručně po
vytvoření instance?
Poslední možností by bylo změnit funkci druhého parametru na
$need <⇒ service je singleton.
(Tady
je nejspíš zbytečný řádek. Prosím přidat – do Texy podporu
<=>.)