Come passare una variabile alla classe utilizzata da un servizio in DI?

0

Ho un problema con il passaggio di un parametro a una richiesta che voglio fare. Non riesco a trovare il modo corretto di farlo.

Ho reso il codice più semplice, di quanto sia realmente, solo per concentrarmi sul problema.

Ho un servizio, che assomiglia a questo:

class CookbookService {

      private $client;

      private $authService;

      public function __construct(
         RESTClient $client,
         AuthService $authService
      ) {
         $this->client = $client;
         $this->authService = $authService;
      }

      public function addRecipe($cookbookId, $recipe) {
         $token = $this->authService->getAuthorization();

         $this->client->addRecipe($cookbookId, $recipe, $token);
      }
}

Il client è simile a questo

class RESTClient {

      private $httpClient;          

      public function __construct ($httpClient) {
          $this->httpClient = $httpClient;
      }

      public function addRecipe($cookbookId, $recipe, $token) {
          $this->httpClient->send('post', [
             'cookbookId' => $cookbookId,
             'recipe' => $recipe
          ], $token);
      }
}

Ora l'obiettivo è aggiungere un parametro alla richiesta, in questo modo:

          $this->httpClient->send('post', [
             'cookbookId' => $cookbookId,
             'recipe' => $recipe,
             'options' => $options
          ], $token);

Il parametro options dovrebbe specificare ulteriori controlli, ad es. controlla se l'utente non ha superato il limite delle sue ricette ecc. per il microservizio. Le opzioni dovrebbero essere configurabili tramite un file config .

Il problema che sto avendo è come iniettare / passare queste variabili al client. Ho trovato un paio di soluzioni, che hanno i loro problemi:

  1. Inietta options sul servizio, quindi passa al client. Il problema qui è che stiamo già superando un buon numero di parametri per la funzione addRecipe in RESTClient . L'aggiunta di un quarto parametro non sembra corretta. Forse un ValueObject dovrebbe essere creato per raccogliere tutti i parametri e passarli a RESTClient ...
  2. Inietta le opzioni direttamente in RESTClient . Il vantaggio è che non devo passare il options dal servizio, ma non sono sicuro, se questi semanticamente sono appropriati per il client (sono più interessati alla logica dell'applicazione, che ai parametri di richiesta).

Forse c'è una terza opzione?

    
posta Canu667 24.03.2018 - 16:37
fonte

0 risposte

Leggi altre domande sui tag