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
+
0
-

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:

  1. Objekt je skutečně potřeba. Metoda se jej v případě potřeby pokusí vytvořit, nebo vyhodí výjimku. (default)
  2. 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 <=>.)

kravčo
Člen | 721
+
0
-

pmg napsal(a):

Prosím přidat – do Texy podporu <=>.

Už som to skúšal