Come progetteresti l'astrazione / classe / i / i componente / i di un servizio / API di terze parti utilizzato nella tua applicazione?

-1

Diciamo che stavi progettando un client Twitter per le persone con persone che potevano vedere tweet e postare tweet? Come progetteresti l'astrazione di twitter api? Molti dei wrapper API che ho visto presentano un oggetto client che prende come input, le credenziali di un utente. Qualcosa di simile al seguente codice:

twitter = TwitterClient(auth) # maybe (username & password) OR token
twitter.post_tweet(message)

Per me, questo client è ora associato a questo utente e opera solo sull'account dell'utente. Se un altro utente si collega, dovremmo creare un altro oggetto client o esiste un modo migliore? Sembra che la memoria del programma aumenterebbe notevolmente se ogni utente iniziasse l'istanziazione di un oggetto programma? C'è un modo migliore per questo?

    
posta an_aspiring_engineer 16.09.2018 - 19:19
fonte

1 risposta

0

Avere il client associato a un utente o una stringa di connessione o qualsiasi altra cosa può essere una buona cosa. Ma sì, ci sono occasioni in cui devi avere un utente diverso ogni volta che chiami un metodo sul client.

Un approccio semplicistico potrebbe essere

twitter.AnyMethod(parameters, auth)

Ma non è molto bello avere questo parametro extra su tutti i metodi.

Potresti avere un metodo di accesso / inizializzazione aggiuntivo o un parametro di autenticazione

twitter = new TwitterClient();
twitter.Login(auth);
//twitter.Auth = auth;
twitter.AnyMethod(params);

Ma non è molto thread-safe, specialmente se stai passando il client Twitter in giro.

Un altro approccio è quello di iniettare una funzione che restituirà l'autenticazione e fare in modo che questa funzione sia dipendente dal contesto.

twitter = new TwitterClient(() => {return HttpContext.User.TwitterAuthCode; })
twitter.AnyMethod(params);

Questo è bello perché puoi ricorrere facilmente al semplice passaggio di una singola autenticazione e non devi cambiare i metodi

Puoi diventare più complesso e magari sovrascrivere una hashmap o un dizionario, in modo che la chiave venga utilizzata per passare l'autenticazione

twitter = new TwitterClient();
twitter[auth].AnyMethod(params);

Non è forse così grande per auth, ma è bello se hai un elenco di cose possibili che non sono note fino a quando il client non è in grado di contattare il server.

    
risposta data 16.09.2018 - 21:07
fonte

Leggi altre domande sui tag