TLDR: TIMEOUT dovrebbe essere una proprietà pubblica sulla mia classe statica o un parametro per ogni funzione?
Sfondo: Sto rilasciando una libreria c # client-api che facilita la comunicazione con la nostra API REST.
Il client-api è costituito da un modello a oggetti e una grande classe statica con una serie di metodi di estensione richiesta per vari tipi. 10 circa% variazioni di% di co_de, alcuni% di.Get()
,% di.Post()
, ecc.
Questa classe statica piena di metodi di estensione è preconfigurata con il nostro URL del server e alcune altre costanti di configurazione statiche correlate alla connessione. Poiché tutte le funzionalità sono esposte tramite i metodi di estensione, non è necessario creare un'istanza di questa classe. Qualsiasi configurazione viene eseguita tramite proprietà statiche e influenza tutte le richieste effettuate dall'applicazione.
Problema:
Al momento, tutte le richieste utilizzano un timeout predefinito di 3 secondi (che sembra generoso per noi, dato che la nostra API deve essere molto reattiva.) Alcuni utenti con una cattiva connessione potrebbero voler aspettare più a lungo per una risposta.
La nostra soluzione rapida è di esporre il DEFAULT_TIMEOUT a una proprietà statica pubblica sulla classe che può essere impostata una sola volta durante l'inizializzazione, ma è la cosa giusta da fare per aggiungere un nuovo parametro opzionale a ciascuna delle nostre dozzine di metodi?
.Get(int timeout = DEFAULT_TIMEOUT) { ... }
.Get(..., int timeout = DEFAULT_TIMEOUT) { ... }
.Get(..., ..., int timeout = DEFAULT_TIMEOUT) { ... }
.Get(..., ..., ..., int timeout = DEFAULT_TIMEOUT) { ... }
...
.Post(..., int timeout = DEFAULT_TIMEOUT) { ... }
.Put(..., int timeout = DEFAULT_TIMEOUT) { ... }
.Save(..., int timeout = DEFAULT_TIMEOUT) { ... }
...
Da un lato, vogliamo essere flessibili a qualsiasi cosa il consumatore della nostra libreria client-API possa aver bisogno, ma d'altro canto, non voglio abituarmi ad inquinare ogni metodo con ogni parametro facoltativo che potrebbe avere un impatto su una richiesta (URL del server, token di autorizzazione, ecc.)
Quello che non voglio, è che l'utente senta la necessità di farlo:
ClientAPI.DEFAULT_TIMEOUT = 5000;
Thing found = new Thing(){ id = "19473" }.Get();
found.count += 1;
ClientAPI.DEFAULT_TIMEOUT = 20000;
found.Put();
ClientAPI.DEFAULT_TIMEOUT = 8000;
List<Widgets> widgets = found.GetSubresource("widgets");
...etc
È ragionevole supporre che gli utenti non saranno timeout di micromanaging per singole richieste del genere?