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:
- Inietta
options
sul servizio, quindi passa al client. Il problema qui è che stiamo già superando un buon numero di parametri per la funzioneaddRecipe
inRESTClient
. L'aggiunta di un quarto parametro non sembra corretta. Forse un ValueObject dovrebbe essere creato per raccogliere tutti i parametri e passarli aRESTClient
... - Inietta le opzioni direttamente in
RESTClient
. Il vantaggio è che non devo passare iloptions
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?