Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

Ruby Diary #23: Configurazioni globali in Rails, é meglio evitare Magic Numbers

Una breve panoramica sul file environment.rb e la gestione delle configurazioni globali in Rails.
Una breve panoramica sul file environment.rb e la gestione delle configurazioni globali in Rails.
Link copiato negli appunti

Chi mastica programmazione a pranzo e cena, ed anche a merenda, senz'altro avrà  già  sentito parlare dei Magic Numbers. Si tratta di una pratica di cattiva programmazione in cui si usa inserire direttamente all'interno del codice delle costanti numeriche senza fornire alcuna spiegazione.

# check whether the account have more domain available
raise NoMoreDomainAvailable unless User.nof_domains < 25

In questo codice è ancora abbastanza comprensibile che 25 sia il limite, ma la domanda resta: di chi o cosa? Prendete quest'altro esempio.

log.status = 1
log.save!()

Qua proprio si capisce poco! Cos'è 1? DEBUG o FATAL ERROR? La pratica corretta sarebbe di riscrivere, ad esempio, l'ultimo script in questo modo.

# Define status list
LOG_STATUS_DEBUG = 0
LOG_STATUS_INFO  = 1
LOG_STATUS_ERROR = 2
log.status = LOG_STATUS_INFO
log.save!()

Nei nostri due esempi 1 e 25 sono magic numbers.

Poiché è essenziale che il codice che io scrivo possa essere compreso agevolmente da chi lavora nel mio team, il problema affrontato in questo post è quello di individuare la posizione ed il formato corretto per salvare questo tipo di elementi.

Innanzitutto, così rapidamente, si tratta di costanti. Dunque il tipo l'ho individuato.

Queste costanti sono globali, speso vengono condivise da più controller così come da view o model. A questo punto la soluzione è quella di individuare un posto globale nell'ambiente.

Cosa? Hai detto ambiente?!?

Ma certo. Apriamo il file config/environment.rb ed inseriamo all'interno, verso il fondo, le costanti che ci servono.

  # See Rails::Configuration for more options
end
# Include your application configuration below
LOG_STATUS_DEBUG = 0
LOG_STATUS_INFO  = 1
LOG_STATUS_ERROR = 2
LIMIT_MAX_NOF_DOMAINS_PER_USER_BASIC   = 25
LIMIT_MAX_NOF_DOMAINS_PER_USER_PRO     = 100
LIMIT_MAX_NOF_DOMAINS_PER_USER_PREMIUM = nil

Tutte le costanti inserite nel file config/environment.rb sono automaticamente disponibili in qualsiasi controller, view e model. Direi che per ora abbiamo trovato la soluzione ai nostri problemi... o no? Consigli per migliorare?

Ti consigliamo anche