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
<=>
.)