Penso che la domanda in generale sia riassunta nel modo migliore in quanto l'App :: make () di Laravel può essere considerata una dipendenza? Da un lato può istanziare qualsiasi numero di diverse implementazioni, quindi forse non è una dipendenza difficile. D'altra parte, una classe dovrebbe essere realmente responsabile di chiamare App :: make () per creare un'istanza delle sue dipendenze, o sarebbe meglio farle passare come parametri alla classe? Qual è l'approccio più pulito / più SOLIDO?
Ecco un esempio specifico:
Un'app effettua una richiesta API a un server esterno. Una classe gestisce la richiesta HTTP effettiva che implementerà HttpClientInterface
e una classe effettua la richiesta e recupera / analizza i dati, chiamandoli LookUp
. Infine, una classe di servizio è in definitiva responsabile della chiamata di lookUp()
metodo su LookUp
class.
Sto cercando di pensare al modo migliore per farlo.
Opzione 1 :
Crea un'istanza delle dipendenze nella classe di servizio e passale come parametri:
class LookUpService
{
public function lookUp($identifier)
{
$client = App::make(HttpClientInterface::class);
$provider = new LookUp($client);
$results = $provider->lookUp($identifier);
}
}
Opzione 2 :
In alternativa, dal momento che utilizziamo comunque l'app :: make () di Laravel, potremmo nasconderlo all'interno della classe LookUp.
class LookUpService
{
public function lookUp($identifier)
{
$provider = new LookUp();
$results = $provider->lookUp($identifier);
}
}
class LookUp
{
public function __construct()
{
$this->client = App::make(HttpClientInterface::class);
}
}
Quale è meglio?