Durante la progettazione di un'API C per la configurazione di una libreria/utilità, ho un collega che preferisce memorizzare tutti i parametri di configurazione in 1 chiamata di funzione. Per esempio:API di configurazione C
int set_diagnostic_email_config(char *to_address,
bool include_timestamp,
bool send_for_crashes,
bool send_daily_status,
bool send_on_event1,
bool send_on_event2)
Un simile "ottenere" la funzione esiste con molti parametri .. Il principale vantaggio di questo metodo è che se qualcuno aggiunge una nuova opzione, ad esempio, "bool send_on_event3", poi perché il prototipo si è cambiato sono costretti ad aggiornare ogni posto in cui viene utilizzata questa chiamata di funzione (supponendo che ci siano più posti in cui la gente lo chiama).
preferisco qualcosa sulla falsariga di:
int get_diagnostic_email_config(struct email_config *p_config);
int set_diagnostic_email_config(struct email_config *p_config);
in cui basta cambiare gli elementi di struttura, se necessario. Ma ... se qualcuno aggiorna la struttura di email_config "non costringe le persone ad aggiornare tutti i punti in cui viene utilizzata (anche se spesso vogliamo ...). Inoltre il mio collega lamenta che se qualcuno tenta di inizializzarsi "email_config" a mano, poi se le cose si aggiunse più tardi poi quei nuovi campi verrà inizializzata senza avvisi.
c'è qualche forte consenso su cui si preferisce il metodo? o forse c'è un'altra alternativa che mi manca?
+1. Ottimo consiglio – DevSolar
+1 fondamentalmente è OOP - più facile da gestire le modifiche, mantenere l'implementazione con lo stato - costruttore/distruttore per inizializzare la pulizia – stefanB
Grazie! Mi piace soprattutto l'idea CONFIG_MAGIC. – Will