AGGIORNAMENTO 2017/04/19
Un'altra vista utilizza wrapper per late binding .
Introduzione
Credo che gli oggetti dovrebbero essere immutabili, quindi ho solo impostato le proprietà tramite il costruttore. In tal caso, lo stato dell'oggetto non cambia mai.
Problema
Ci sono casi in cui i parametri richiesti per il costruttore non sono noti in quel momento. Quindi ho bisogno di:
- un setter (non è la mia preferenza)
- un'istanza 'hard coded' nel mio metodo (no Depency Injection, non flessibile) (non è la mia preferenza)
- un binding posticipato (possibile soluzione, ma lo svantaggio (credo) è che il contenitore contenga troppe logiche)
Caso
Consentitemi di dare un esempio di codice semplificato per illustrare il mio problema (PHP).
interface Personable
{
public function __toString();
}
final class Person implements Personable
{
private $name;
public function __construct(string $name)
{
$this->name = $name;
}
public function __toString(): string
{
return 'Person ' . $this->name;
}
}
final class Foo
{
private $personable;
public function __construct(Personable $personable)
{
$this->personable = $personable;
}
}
Domanda
Supponiamo che per default leghi Personable
a Person
nel mio contenitore. In quel momento non ho il required name parameter
. Voglio passare l'istanza di Person
tramite il costruttore. Qual è la migliore pratica?