Devo programmare un client generico che utilizzi diversi client concreti (diverse API), tutti che condividono la stessa interfaccia. Devo registrare la risposta del client.
Per fare ciò (eseguendo il login in background senza che l'utente debba eseguirlo manualmente), ho creato queste classi:
Request
, Response
, ClientService
, Client1
, Client2
, ClientInterface
.
Quindi, istanziate ClientService e impostate il nome del cliente, ad esempio:
$client = $this->get('clientService')->setClient('client1');
// $data is an associative array
$request = $client->createRequest($data);
// $response was saved to database by ClientService, before returning it.
$response = $client->doRequest($request);
ClientService
, Client1
e Client2
implementa ClientInterface
, che ha metodi doRequest()
, createRequest()
, getError()
, ecc., ma tutte le implementazioni di ClientService fanno inoltrare la richiesta al cliente reale .
Ho fatto questo per poter salvare automaticamente la risposta al database, e affinché ciò avvenga senza dover ripetere il codice in tutti i client, e per lasciare che questa preoccupazione sia nel servizio, doveva avere il controllo sull'intero ciclo di vita richiesta / risposta.
Mi chiedo se esiste uno schema che descrive già questo scenario.