Gestione della configurazione e test di un Singleton (richiesta di feedback)

Ciao a tutti,

le funzionalità di una gemma che sto creando dipendono da una lista di
parametri di configurazione specificabili a run-time o tramite yaml
(yaml è
una mia convenzione, non un requirement).

Il primo candidato che mi è venuto in mente per gestire gli aspetti
della
configurazione è una classe Singleton:

lib/mymodule/configuration.rb

require ‘singleton’

class Configuration
include Singleton

instance-level helpers here

end

Ma mi sono subito scontrato con la scomodità nel testare un Singleton.

Dopo qualche smanettamento sono giunto all’introduzione di una classe
Singleton-like resettabile (ConfigurationProvider) per la gestione del
ciclo di vita dell’oggetto realmente responsabile dei parametri di
configurazione (Configuration).

In questo modo, prima di usare le funzionalità della gemma il consumer
deve
effettuare un:

ConfigurationProvider.setup(path: ‘path/to/configuration.yml’)

Makes sense?

Ciao Maurizio,

2013/11/21 maurizio de magnis [email protected]:

Ma mi sono subito scontrato con la scomodit nel testare un Singleton.

che difficolta’ hai trovato?

ConfigurationProvider.setup(path: ‘path/to/configuration.yml’)

Trying to handle Singleton in a more flexible way · GitHub

Makes sense?

direi di si.

altra cosa che mi viene in mente e’ quella che avviene quando fai un
engine per rails:
http://apidock.com/rails/Module/mattr_accessor

Tra l’altro l’esempio nella doc e’ proprio un modulo con delle config.

ciao ciao,
matteo.

2013/11/21 bugant [email protected]:

altra cosa che mi viene in mente e’ quella che avviene quando fai un
engine per rails:
mattr_accessor (Module) - APIdock

ho notato solo ora che mattr_accessor viene aggiunto da rails, quindi
se la tua gem non dipende da rails, ovviamente non ha senso quello che
ho detto :slight_smile:

in caso si potrebbe riprendere solo quel pezzo di codice.

ciao ciao,
matteo.

2013/11/21 bugant [email protected]

Ciao Maurizio,

2013/11/21 maurizio de magnis [email protected]:

Ma mi sono subito scontrato con la scomodità nel testare un Singleton.

che difficolta’ hai trovato?

Nel resettare lo stato prima di ogni test.
Oddio, potrei impostare lo stub del path del file di configurazione
specificando un mio yaml di test ma in questo modo sarei costretto a far
condividere a tutti i test la stessa configurazione.

Ciao Maurizio,

On Nov 21, 2013 5:58 PM, “maurizio de magnis”
[email protected]
wrote:

Nel resettare lo stato prima di ogni test.
Oddio, potrei impostare lo stub del path del file di configurazione
specificando un mio yaml di test ma in questo modo sarei costretto a far
condividere a tutti i test la stessa configurazione.

OK. Got it. La soluzione del mattr_accesible come ti pareva?

ciao ciao,
matteo.


Maurizio ಠ_ಠ My profile<
https://plus.google.com/100973969013103507046/about>

Ciao matteo

2013/11/21 bugant [email protected]
[cut]

La soluzione del mattr_accesible come ti pareva?

All’atto pratico mi pare altrettanto valida :slight_smile:

A questo punto la scelta tra la versione del Module e quella del
Singleton
casalingo diventa quasi una questione di gusto.

2013/11/21 maurizio de magnis [email protected]:

Ciao a tutti,

le funzionalit di una gemma che sto creando dipendono da una lista di
parametri di configurazione specificabili a run-time o tramite yaml (yaml
una mia convenzione, non un requirement).

Ciao Maurizio, non so su cosa tu stia lavorando ma se la tua libreria
prevede una sola istanza (e quindi una sola configurazione) c’e` forse
a monte un errore di design della tua API.

Piccolo follow-up della chat avvenuta con il buon Stefano :slight_smile:
Ha effettivamente ragione: ha senso abbandonare il pattern Singleton in
favore del miglior compromesso tra i pattern Template e Factory.
More on this later :wink:

2013/11/21 Stefano P. [email protected]